asp.net - net - routeconfig c#
Enrutamiento ASP.NET: ¿las rutas personalizadas omiten COMPLETAMENTE todo en Global.asax? (4)
Tengo una sencilla aplicación de formularios web ASP.NET 3.5 SP1 ... Agregué el DLL System.Web.Routing, y realicé una ruta simple que devuelve una página ASP.NET estándar como "IHttpHandler".
Todo está bien ... excepto que HttpContext.Current.User es nulo ???
Entonces, investigué un poco más (puse puntos de corte en todos los eventos en el archivo Global.asax). Normalmente, estos puntos de interrupción reciben un golpe (cuando navego a una página estándar ".aspx"):
- Application_BeginRequest
- Application_AuthenticateRequest
- Application_EndRequest
Pero, al usar enrutamiento ASP.NET ... ninguno de esos eventos se activa. ¿Me estoy perdiendo de algo?
Encontré la respuesta monstruosa y bizarra (y estúpida) :)
Si no agrega ".aspx" al final de su ruta, no se activa nada en Global.asax, lo que significa que no obtiene BeginRequest, AuthenticateRequest, EndRequest, etc ... Además, no obtiene SessionState o algo.
Entonces, el "arreglo" fue para mí solo cambiar mi ruta de esto:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler());
a esto:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler());
¡Qué tonto :) ... pero es una solución sin excepción!
Suponiendo que está utilizando IIS6, la alternativa es definir un controlador de extensión "comodín". Agregar este simple mapeo "catch all" a IIS6 le permitirá procesar sus solicitudes sin extensión. De forma predeterminada, el instalador de .NET asigna ".aspx" al aspnet_isapi.dll, por eso funciona la extensión .aspx. Para asignar solicitudes sin extensión al motor APS.NET, debe indicarle a IIS que observe cada solicitud .
Aquí hay un artículo rápido que explica el proceso:
http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
Espero que ayude y reduzca el factor "cojo" de sus URL. :)
-Todd
Cuando tu dices
"Si no agrega" .aspx "al final de su ruta, no se activa nada en Global.asax, lo que significa que no obtiene BeginRequest, AuthenticateRequest, EndRequest, etc ... Además, no obtiene SessionState o cualquier cosa ".
¿IIS registrará tales solicitudes en los archivos de registro o solo son anónimos? ¿Qué pasa con las variables de aplicación y ViewState?
lo siento, todavía no lo he probado, solo preguntando si ya lo sabes.
He comprobado la variable de aplicación y Viewstate, estos dos obviamente están funcionando. No estoy seguro acerca de los registros del servidor: S