2

考虑一个定位和提供文件的 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) 提供静态文件?

4

2 回答 2

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}");
于 2010-09-24T04:52:44.863 回答
1

除了 Daniel Crenna 的回答,您需要在 system.webServer 部分添加 web.confug 文件:

<modules runAllManagedModulesForAllRequests="true"/>
于 2013-03-13T11:14:23.810 回答