2010-03-29 17 views
2

考慮一個定位和提供文件的StaticResourceController。ASP.NET MVC不使用控制器在IIS7中顯式文件路由

我已經設置了「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

控制器方法是否正在執行? – 2010-03-29 22:44:01

+0

它在IIS6中,在IIS7中完全被繞過。 – 2010-03-30 07:14:30

回答

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

在adiition丹尼爾Crenna的回答,您需要在system.webServer部分的web.confug文件中添加:

<modules runAllManagedModulesForAllRequests="true"/>