Pergunta

Estou tentando processar solicitações de página ".aspx" e não extensão (ou seja, contact.aspx e /contact /) usando um httphandler personalizado no iis7. Meu manipulador funciona muito bem em um caso ou outro, mas assim que eu tentar processar os dois casos, ele funciona apenas para um. Por favor, veja os manipuladores Snippet do meu web.config abaixo:

Se eu continuar apenas mapeando para "*.aspx", todas as solicitações .aspx são processadas corretamente, mas obviamente solicitações sem extensão não funcionarão:

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

Se eu alterar o mapeamento para "*", todas as solicitações sem extensão serão processadas corretamente, mas ".aspx" solicitações que ainda devem ser tratadas por esse manipulador, pare de funcionar. Observe que adicionei a entrada do StaticFiles para processar arquivos que estão em disco como imagens, 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="" />

O louco é que, quando carrego uma solicitação ".aspx" (com a 2ª configuração mostrada) O IIS7 fornece um erro 404 não encontrado. O erro também diz que a solicitação é processada pelo manipulador de arquivos estáticos. Mas eu certifiquei -me de adicionar ResourceType = "File" ao StaticFileHandler para evitar isso. De acordo com o MS, isso significa que a solicitação é apenas para "arquivos físicos no disco". Estou interpretando/interpretando mal a parte "On Disk"?

Meu arquivo .aspx não está no disco, é por isso que quero usar o manipulador em primeiro lugar.

Foi útil?

Solução

A 2ª configuração causará *.aspx ser tratado por StaticFileHandler Porque os arquivos existem para que atendam aos critérios para o manipulador. No entanto, o manipulador está configurado para não servir a esses arquivos e produz uma mensagem 404.

Uma solução melhor seria usar uma implementação de httpmodule, como Módulo de reescrita de URL Para reescrever caminhos virtuais para páginas ou manipuladores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top