Pregunta

Estoy tratando de procesar tanto ".aspx" y solicitudes de página no extensión (es decir, tanto contact.aspx y / contacto /) utilizando una costumbre HttpHandler en IIS7. Mi manejador funciona muy bien, ya sea en uno u otro caso, pero tan pronto como intento procesar ambos casos, sólo funciona para uno. Por favor ver los manipuladores fragmento de mi web.config a continuación:

Si sigo única asignación a "* .aspx", entonces todas las solicitudes .aspx se procesan correctamente, pero, obviamente, las solicitudes sin extensión no funcionará:

<add name="AllPages.ASPX" path="*.aspx" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

Si cambio la asignación a "*", entonces todas las solicitudes sin extensión se procesan correctamente, pero ".aspx" solicitudes que aún deben ser manejadas por este controlador dejan de funcionar. Tenga en cuenta que he añadido la entrada StaticFiles con el fin de procesar los archivos que se encuentran en el disco como imágenes, CSS, JS, etc.

<add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" />
<add name="StaticFiles" verb="GET,HEAD" path="*.*" type="System.Web.StaticFileHandler" resourceType="File" />
<add name="AllPages" path="*" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

Lo más loco es que cuando cargo una petición de ".aspx" (con la segunda configuración mostrada) IIS7 da un error 404 no encontrado. El error también dice que la solicitud es procesada por el manejador StaticFiles. Pero me aseguré añadir resourceType = "archivo" para el StaticFileHandler con el fin de evitar esto. De acuerdo con la EM esto significa que la solicitud es sólo para "los archivos físicos en el disco". ¿Estoy mala lectura / interpretación de la "en el disco" parte?

Mi archivo .aspx no está en el disco, por eso quiero usar el controlador en el primer lugar.

¿Fue útil?

Solución

La segunda configuración hará que * .aspx conseguir manejado por StaticFileHandler porque los archivos existen de modo que cumplan los criterios para el manipulador. Sin embargo, el controlador está configurado para no servir a estos archivos y produce un mensaje 404 en su lugar.

Una mejor solución sería utilizar una implementación HttpModule tales como módulo de reescritura de URL para reescribir caminos virtuales a páginas o manipuladores.

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