2011-04-05 213 views
2

我正在嘗試.NET 4.0的新功能 - 網址路由,但無法獲取在網址中傳遞的信息。以下是代碼:AsP.NET 4.0網址路由

GLOBAL.ASPX.CS

protected void Application_Start(object sender, EventArgs e) 
    {    
     SetRouting(RouteTable.Routes);   
    } 

    private void SetRouting(RouteCollection routeCollection) 
    { 
     routeCollection.MapPageRoute("Company", 
     "Company/{CompanyName}", 
     "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "CompanyName", "?CompanyName" } }); 

     routeCollection.MapPageRoute("Deal", 
     "Company/{CompanyName}/{DealName}", 
     "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "DealName", "?DealName" } }); 
     routeCollection.MapPageRoute("ClientRoute", 
     "Client/{ClientCompanyName}", 
     "~/User/Login.aspx", true, new RouteValueDictionary { { "ClientCompanyName", "?ClientCompanyName" } }); 
    } 

的Login.aspx:

private string CompanyName { 
     get 
     { 
      if (Page.RouteData.Values["ClientCompanyName"] == null) 
      { 
       return null; 
      } 
      return Page.RouteData.Values["ClientCompanyName"].ToString(); 
     } 
    } 

現在上面提到的回報的財產空,即使我在URL中使用客戶端/谷歌。當我重置IIS(IIS 6)並首次執行時,它會返回值。否則它給null。

ANY CLUE ??

回答

0
routeCollection.MapPageRoute("ClientRoute", 
          "Client/{ClientCompanyName}",   
          "~/User/Login.aspx", 
          true, 
          new RouteValueDictionary {{ "ClientCompanyName", "?ClientCompanyName"}}; 

這實際上沒有多大意義。 RouteValueDictionary用於指示在URL中未提供「ClientCompanyName」值的情況下使用的默認值。在這裏,你說你希望「ClientCompanyName」是默認值。例如,如果您導航到http://baseUrl/Client,則默認爲http://baseUrl/Client/?ClientCompanyName(字面意思)。我認爲你想實際改變?ClientCompanyName爲你想成爲默認的真實的「真實」公司名稱。我的建議是在這種情況下不要有默認值,只需使用帶有3個參數(字符串,字符串,字符串)的MapPageRoute覆蓋。我發現在很多情況下,這就夠了。此外,這裏有一個擴展方法,你可以爲你請求對象,可以幫助你:

public static string GetDataFromRouteOrRequest(this HttpRequest request, string key) 
{ 
    if (request.RequestContext.RouteData.Values.ContainsKey(key)) 
     return request.RequestContext.RouteData.Values[key].ToString(); 

    return request[key]; 
} 
+0

感謝您的答覆。但同樣的原因是我的登錄頁面被擊中兩次。首先使用期望的URL,然後將ClientCompanyName替換爲「iepngfix.htc」。這發生在IE – Ankit 2011-04-06 09:54:43

+0

你使用IIS7嗎? – SideFX 2011-04-06 12:22:02