2011-02-08 63 views
7

首先,這不是MVC,僅限於WebForms ..如何使用查詢字符串路由ASP.NET 4 WebForms?

我使用路由來保持我的站點向後兼容我們的客戶,同時使我的項目組織。

我也想將我們的加密查詢字符串移動到更友好的網址。 這是如何工作的,我們的客戶必須爲一個巨大的加密網址添加書籤,以防止他們通過更改身份證件來猜測我們的其他客戶。

但不是有這個巨大的url,想爲每個客戶端添加一個像LoginClientName.aspx這樣的路由,並將加密的查詢字符串硬編碼或可能在數據庫中。

但沒有看到一個方法來添加查詢到的MapPageRoute ..

是這樣思考的東西(知道它不工作)

 
routes.MapPageRoute("MapClient1", "LoginClient1.aspx", "Login.aspx?secure=mylongquerystring"); 
routes.MapPageRoute("MapClient2", "LoginClient2.aspx", "Login.aspx?secure=differentmylongquerystring"); 

現在這個,因爲它不拋出異常不允許?在網址..任何想法如何做到這一點?還是不可能?

回答

6

看一看這個:
http://msdn.microsoft.com/en-us/library/cc668177.aspx

基本上是它的說法是:

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


然後:

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("", 
     "SalesReport/{locale}/{year}/{*queryvalues}", "~/sales.aspx"); 

    routes.MapPageRoute("SalesSummaryRoute", 
     "SalesReportSummary/{locale}", "~/sales.aspx"); 

    routes.MapPageRoute("SalesDetailRoute", 
     "SalesReportDetail/{locale}/{year}/{*queryvalues}", "~/sales.aspx", 
     false); 

... 

    routes.MapPageRoute("ExpenseDetailRoute", 
     "ExpenseReportDetail/{locale}/{year}/{*queryvalues}", "~/expenses.aspx", 
     false, 
     new RouteValueDictionary 
      { { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } }, 
     new RouteValueDictionary 
      { { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } }, 
     new RouteValueDictionary 
      { { "account", "1234" }, { "subaccount", "5678" } }); 
} 
3

這是否意味着您必須爲每個客戶單獨指定每條路線? (如果是的,你可以一直爲這個使用web.config urlMapping

相反,使用客戶端名稱作爲路線的一部分,然後使用客戶端名稱來查找您的reallylongquerystring

是這樣的:

routes.MapPageRoute("ClientLoginRoute","Login/{clientName}","~/forms/login.aspx") 

,然後在login.aspx的頁面訪問客戶名稱等,並期待一長串

String reallyLongQueryString = Magic.GetReallyLongQueryString(Page.RouteData.Values["clientName"]); 

Dim reallyLongQueryString as String = Magic.GetReallyLongQueryString(Page.RouteData.Values("clientName")) 

我假定這裏THA t如果客戶知道另一個客戶的名字並不重要(因爲他們不知道登錄的詳細信息)(因爲他們仍然需要輸入憑證等)

+0

是的,這將是我的答案。 (該C#版本應該是這個字符串reallyLongQueryString = Magic.GetReallyLongQueryString(Page.RouteData.Values [「clientName」]); ) – 2011-02-09 01:11:49

+2

固定起來,爲什麼不會有智能感知! – davidsleeps 2011-02-09 02:01:53