O roteamento do MVC não está lidando com um dos meus diretórios
-
21-09-2019 - |
Pergunta
Estou usando o ASP.NET MVC com o IIS 7.0. Eu tenho 404 erros conectados bem através da minha substituição Application_error.
Além de "controladores", "modelos", "ajudantes" etc. Eu tenho um diretório chamado 'arquivos' que eu uso para armazenar arquivos utilizados pelo usuário. Quando eu for para http://www.mysite.com/files, em vez de obter uma página 'não encontrada', recebo uma página padrão IIS 403 que fornece muita informação (por exemplo, estrutura de diretório exata do servidor):
HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.
Se eu tentar acessar http://www.mysite.com/controllers ou http://www.mysite.com/helpers, que são diretórios existentes com arquivos de código, eu recebo uma página 404, que é o que eu quero. Não quero que o usuário saiba nada sobre minha estrutura de diretório.
Por que o MVC não está lidando com o diretório /arquivos?
Solução
Eu descobri isso. O motivo pelo qual o diretório de visualizações estava retornando uma página '404' adequada, mas o diretório de arquivos estava retornando uma página de 'sem permissões' da MUITO-Informação: existe um arquivo web.config no diretório de visualizações que proíbe mostrar arquivos. Ele tem os trechos abaixo para impedir que o MVC atenda ao diretório.
Acabei de adicionar um arquivo web.config semelhante ao meu diretório de arquivos, e o MVC agora age como o diretório não existe, o que é exatamente o que eu quero.
<httpHandlers>
<add path="*" verb="*"
type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
</handlers>
</system.webServer>