ASP.NET MVC不使用控制器在IIS7明确的文件路径
-
23-09-2019 - |
题
考虑一个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时预期的结果出现://本地主机:8080 / favicon.ico的
不幸的是,当我部署到IIS7 HTTP://localhost/favicon.ico 返回IIS生成404 ,大概是因为它实际上是寻找在Web根文件夹,其中不存在的favicon.ico的。
我在StaticResourceController足够的发生,这不是我的应用程序是件好事,特别是因为它是多租户和favicon.ico的文件可以改变。我设置我的Web服务器模块来处理每一个请求,并覆盖RouteCollection与RouteExistingFiles无视文件检查。
为什么UrlRoutingModule让我在IIS7的方式,迫使服务从盘(404)的静态文件?
解决方案
在万一别人运行到这个问题,解决的办法是,你需要你让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}");
其他提示
在adiition丹尼尔Crenna的答案,你需要在web.confug文件中添加system.webServer部分:
<modules runAllManagedModulesForAllRequests="true"/>
不隶属于 StackOverflow