考虑一个定位和提供文件的StaticResourceController。
我为“favicon.ico”设置了一条显式路由,它将使用StaticResourceController处理此文件的请求:
routes.MapRoute(
"favicon",
"favicon.ico",
new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
new[] { "Dimebrain.Mvc.Controllers" }
);
在IIS6中,在发出http://localhost:8080/favicon.ico请求时会出现预期结果。
不幸的是,当我部署到IIS7时http://localhost/favicon.ico返回一个IIS生成的404,大概是因为它实际上在web根文件夹中找不到它的favicon.ico。
我在StaticResourceController中发生了足够的事情,这对我的应用程序来说不是一件好事,特别是因为它是多租户而且favicon.ico文件可以改变。我已设置我的Web服务器模块来处理每个请求并覆盖RouteCollection以忽略使用RouteExistingFiles的文件检查。
为什么UrlRoutingModule会妨碍我在IIS7中使用并强制从磁盘(404)提供静态文件?
答案 0 :(得分:1)
如果其他人遇到此问题,解决方案是您需要让MVC知道不要在实际静态文件所在的文件夹中处理请求:
// 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}");
答案 1 :(得分:1)
除了Daniel Crennan的回答,你需要在system.webServer部分添加web.confug文件:
<modules runAllManagedModulesForAllRequests="true"/>