2011-02-08 4 views
7

먼저 MVC, WebForms가 아닙니다.쿼리 문자열로 ASP.NET 4 WebForms 라우팅 사용하는 방법?

내 프로젝트를 체계적으로 구성하면서 고객을 위해 내 사이트와의 호환성을 유지하기 위해 라우팅을 사용하고 있습니다.

암호화 된 쿼리 문자열을 좀 더 친숙한 URL로 옮길 생각입니다. 어떻게 작동합니까? 고객이 ID를 변경하여 다른 클라이언트를 추측하지 못하도록 막대한 암호화 된 URL을 책갈피에 추가해야합니다.

그러나이 거대한 URL을 갖는 대신 LoginClientName.aspx와 같은 경로를 각 클라이언트에 추가하고 암호화 된 쿼리 문자열을 하드 코딩하거나 데이터베이스에 저장하려고합니다. 그것은 아무튼 이후

그러나 MapPageRoute에 쿼리를 추가하는 방법이 표시되지 않습니다 ..

이 같은 것을 생각하고 (이 작업을 나던) 알고 있었는

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

이제이 예외를 throw a는 허용하지 않습니까? URL에서 .. 어떤 아이디어가 이것을 달성하는 방법? 아니면 불가능한가요?

답변

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

관련 문제