2011-02-08 15 views
7

まず、これはMVCではなく、Webフォームのみです。ルーティングASP.NET 4 Webフォームとクエリ文字列の使用方法

私のプロジェクトを整理しながらクライアントとの下位互換性を維持するためにルーティングを使用しています。

暗号化されたクエリ文字列をより使いやすいURLに移動することも考えています。 これはどのように動作しますか?私たちのクライアントは、IDを変更して他のクライアントを推測することを防ぐために、暗号化された膨大なURLをブックマークする必要があります。

しかし、この巨大なURLを持つ代わりに、各クライアントにLoginClientName.aspxのようなルートを追加し、暗号化されたクエリ文字列をハードコードしたり、データベースに格納したりすることが必要でした。

しかしMapPageRouteにクエリを追加する方法が表示されない...

はこのような何かを考えていた(それは仕事をdoesntの知っている)

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

それはdoesnのため、今は、この例外がスローされますaを許可しない?どのようにこれを達成するためのアイデア?それとも不可能なのでしょうか?

答えて

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" } }); 
} 
この時
+0

これは私が望んでいたものとまったく同じように機能しました... routes.MapPageRoute( "ClientLogin1"、 "LoginClientName1"、 "〜/ Account/Login.aspx"、false、new RouteValueDictionary {{"secure"、 "longhardcodedencryptedstring"}}); – jaekie

+0

@LeeHull実際に私はあなたに出会ったときに同じ質問を自分で探していたので、私に見せてくれてありがとう – Letseatlunch

3

これは、クライアントごとに個別にすべてのルートを指定する必要があるということですか?

:あなたのreallylongquerystringこのような

何かを調べるために、ルートの一部としてクライアント名を使用して、クライアント名を使用し、

代わりに(はいている場合、あなたはいつもこのためにweb.config urlMapping使用することもできます)

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")) 

を長い文字列を検索し、私はここに股関節を想定していますクライアントが別のクライアントの名前を知っていたとしても、ログインの詳細がわからない場合(それが意味をなさない場合)、資格情報などを入力する必要があります。

+0

これは私の答えでした。 (C#バージョンはこの文字列でなければなりません。reallyLongQueryString = Magic.GetReallyLongQueryString(Page.RouteData.Values ["clientName"]); ) –

+2

が修正されました。 – davidsleeps

関連する問題