Pregunta

Estoy tratando de agregar una ruta bastante básico a una aplicación Web Forms Asp.Net (que se ejecuta bajo IIS 7, el modo integrado): para las peticiones que entren a http://mydomain.com/foo/ me gustaría mostrar los resultados de una página dinámica ( http://mydomain.com/foopage.aspx ).

He creado un RouteHandler que hace todo esto y parece ser enrutamiento correctamente.

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
     var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/foo.aspx", typeof(MyApp.Web.Foo)) as MyApp.Web.Foo;
     return page as IHttpHandler;
    }

El problema es, dentro de mi método de GetHttpHandler RouteHandler, todas las instancias del usuario actual (requestContext.HttpContext.User, System.Web.HttpContext.Current.User) son nulos. Lamentablemente, foo.aspx tiene que saber lo que el usuario actual es (para controles de acceso, cosas de papel, etc.), por lo que la prestación de la página está lanzando excepciones referencia nula. Mi conjetura es que estos controladores de ruta están disparando antes de Asp.Net tiene la oportunidad de cable hasta el HttpContext con la información de usuario. Cualquier idea de una solución alternativa?

PS - Me di cuenta de esto se puede lograr haciendo una Server.Transfer en una página en http: / /mydomain.com/foo/default.aspx . Me gustaría utilizar el enrutamiento para este tipo de cosas en lugar de tener un montón de carpetas inútiles que saturan las cosas.

Gracias!

¿Fue útil?

Solución 2

He conseguido la forma de saberlo yo.

Al igual que esta pregunta , mis rutas estaban trabajando muy bien cuando el origen de la ruta terminó en .aspx ( http : //mydomain.com/foo-origin.aspx), pero no cuando no lo hicieron ( http://mydomain.com/foo-origin/ ).

El artículo de MSDN sobre la configuración de enrutamiento con los formularios web narra a hacer algunos cambios en web.config, pero deja de lado que es necesario configurar runAllManagedModulesForAllRequests en true en el nodo módulos:

<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
  </system.webServer>
</configuration>

Ahora funciona a las mil maravillas.

Otros consejos

Vea la respuesta a esta pregunta , muy similar.

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