2011-02-08 16 views
7

En primer lugar, esto no es MVC, WebForms solamente ...Cómo usar enrutamiento ASP.NET 4 WebForms con Query String?

Estoy usando enrutamiento para mantener mi sitio compatible con versiones anteriores para nuestros clientes, mientras hago mi proyecto organizado.

También estoy pensando en mover nuestra cadena de consulta cifrada a una URL más amigable. Cómo funciona esto es que nuestros clientes tienen que marcar una gran url cifrada para evitar que adivinen a nuestros otros clientes al cambiar una identificación.

Pero en lugar de tener esta url enorme, quería agregar una ruta como LoginClientName.aspx para cada cliente y tener la cadena de consulta cifrada codificada o tal vez en la base de datos.

Pero no ve una manera de agregar una consulta a la MapPageRoute ..

estaba pensando en algo como esto (saben que no funciona)

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

Ahora bien, esto ha producido una excepción, ya que doesn ¿Permitir un? en url ... alguna idea de cómo lograr esto? o es imposible?

Respuesta

6

eche un vistazo en este:
http://msdn.microsoft.com/en-us/library/cc668177.aspx

básicamente lo que su palabra es:

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


y luego:

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

Esto funcionó exactamente como yo quería ... did routes.MapPageRoute ("ClientLogin1", "LoginClientName1", "~/Account/Login.aspx", falso, nuevo RouteValueDictionary {{"secure", "longhardcodedencryptedstring"}}); – jaekie

+0

@LeeHull en realidad estaba buscando la misma pregunta cuando me encontré con la suya, así que gracias por hacerme ver en ella – Letseatlunch

3

¿Esto significa que debe especificar cada ruta individualmente para cada cliente? (En caso afirmativo, se podría haber utilizado siempre web.config urlMapping para esto)

su lugar, utilice el nombre del cliente como parte de la ruta y luego usar el nombre del cliente para buscar su reallylongquerystring

algo como esto:

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

y luego en el acceso a la página login.aspx el nombre del cliente, etc y mirar hacia arriba la cadena larga

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

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

estoy presumiendo aquí tha t no importa si un cliente sabía el nombre de otro cliente, ya que no sabría los detalles de inicio de sesión (si tiene sentido) ... ya que aún necesitaría ingresar las credenciales, etc.

+0

Sí, esta habría sido mi respuesta. (La versión de C# debería ser esta cadena realmenteLongQueryString = Magic.GetReallyLongQueryString (Page.RouteData.Values ​​["clientName"]); ) –

+2

arreglado, ¿por qué SO no tiene intellisense? – davidsleeps

Cuestiones relacionadas