Enrutamiento de ASP.NET - ¿Rutas personalizadas SALTAR COMPLETAMENTE Todo en Global.asax?

StackOverflow https://stackoverflow.com/questions/400236

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación simple de formularios web ASP.NET 3.5 SP1 ... Agregué la DLL de System.Web.Routing, y hice una ruta simple que devuelve una página ASP.NET estándar como " IHttpHandler " ;.

Todo está bien ... excepto que HttpContext.Current.User es null ???

Entonces, hice un poco más de investigación (puse puntos de interrupción en todos los eventos en el archivo Global.asax). Normalmente, estos puntos de interrupción se ven afectados (cuando navego a una página estándar de " .aspx "):

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

Pero, cuando se usa el enrutamiento de ASP.NET ... ninguno de esos eventos se está activando. ¿Me estoy perdiendo algo?

¿Fue útil?

Solución

Suponiendo que está utilizando IIS6, la alternativa es definir un " comodín " gestor de extensiones. Agregando este sencillo " captura todos " la asignación a IIS6 le permitirá procesar sus solicitudes sin extensión. De forma predeterminada, el instalador .NET asigna " .aspx " a aspnet_isapi.dll, es por eso que la extensión .aspx funciona. Para asignar solicitudes sin extensión al motor APS.NET, debe indicar a IIS que examine todas las solicitudes .

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 " cojo " Factor de tus URLs. :)

-Todd

Otros consejos

Encontré la respuesta freakish y bizzare (y estúpida) :)

Si no agrega " .aspx " hasta el final de su ruta, nada se dispara en Global.asax, lo que significa que no obtiene ningún BeginRequest, AuthenticateRequest, EndRequest, etc ... Además, no obtiene SessionState ni nada.

Por lo tanto, la " corrección " Era para mí simplemente cambiar mi ruta a partir 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é completo! >> ¡Pero es una solución sin embargo!

Cuando dices

" Si no agrega " .aspx " hasta el final de tu ruta, nada se dispara en Global.asax, lo que significa que no obtienes ninguna BeginRequest, AuthenticateRequest, EndRequest, etc ... Además, no obtienes SessionState ni nada. "

¿IIS registrará dichas solicitudes en los archivos de registro o solo son anónimas? ¿Qué pasa con las variables de aplicación y ViewState?

lo siento, no lo he probado todavía, pero ¿solo pregunto si es posible que ya lo sepa?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top