Pergunta

Considere um StaticResourceController que localiza e fornece arquivos.

Configurei uma rota explícita para "favicon.ico" que tratará a solicitação deste arquivo usando StaticResourceController:

routes.MapRoute(
        "favicon",
        "favicon.ico",
        new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
        new[] { "Dimebrain.Mvc.Controllers" }
        );

No IIS6 o resultado esperado ocorre ao fazer uma solicitação de http://localhost:8080/favicon.ico.

Infelizmente, quando eu implanto no IIS7 http://localhost/favicon.ico retorna um 404 gerado pelo IIS, provavelmente porque na verdade está procurando o favicon.ico na pasta raiz da web, onde ele não existe.

Já tenho coisas suficientes acontecendo no StaticResourceController que isso não é bom para meu aplicativo, especialmente porque ele é multilocatário e o arquivo favicon.ico pode mudar.Eu configurei meus módulos de servidor web para lidar com todas as solicitações e substituir o RouteCollection para desconsiderar as verificações de arquivos com RouteExistingFiles.

Por que o UrlRoutingModule está atrapalhando no IIS7 e forçando o envio do arquivo estático do disco (404)?

Foi útil?

Solução

Caso qualquer outra pessoa entre nesse problema, a solução é que você precisa que você informe o MVC para não processar solicitações em pastas onde seus arquivos estáticos reais vivem:

// Make sure MVC is handling every request for static files
routes.RouteExistingFiles = true;

// Don't process routes where actual static resources live
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("areas/admin/content/{*pathInfo}");
routes.IgnoreRoute("areas/admin/scripts/{*pathInfo}");

Outras dicas

Além da resposta de Daniel Crenna, você precisa adicionar o arquivo web.confug na seção system.webServer:

<modules runAllManagedModulesForAllRequests="true"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top