考虑一个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"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top