2011-02-08 64 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