2011-10-10 25 views

回答

23

您需要爲不希望通過ASP.NET MVC提供服務的特定類型的文件創建忽略路由。

將以下內容添加到您的路由中,以查看要忽略的文件類型。

下工作的文件根:如果您想將這些組合成

routes.IgnoreRoute("assets/{*pathInfo}"); 

routes.IgnoreRoute("{file}.css"); 
routes.IgnoreRoute("{file}.jpg"); 
routes.IgnoreRoute("{file}.gif"); 

如果你想在一個特定的目錄忽略的文件,你可以這樣做一個路由,你可以(例如忽略目錄中特定類型的文件):

routes.IgnoreRoute("{assets}", new { assets = @".*\.(css|js|gif|jpg)(/.)?" }); 

這個overload of IgnoreRoute接受一個url(第一個參數)和一個要忽略的事物的Constraints對象。

由於ASP.NET MVC中的RouteConstraints可以通過多種方式實現(包括正則表達式),所以可以在第二個參數中放置標準正則表達式。

如果你想實現一個自定義約束,there is lots of useful documentation on that subject(比如,如果你的約束在運行時是動態的)。

+0

爲什麼你只是做routes.RouteExistingFiles = FALSE;它不應該爲存在的文件工作嗎? –

2

在方法開始Global.asax.csRegisterRoutes寫:

routes.IgnoreRoute("Content/{*pathInfo}"); 

包含你的靜態文件的文件夾的名稱替換Content

喬治,但是,提供More comprehensive solution

6

靜態文件不是由ASP.NET MVC處理,除非你有一個靜態文件的URL匹配的路由。也許你在問關於ASP.NET處理的靜態文件,在這種情況下,你不應該使用runAllManagedModulesForAllRequests="true"。這是一個post與更多的信息。

15

請注意,@ george-stocker的答案僅適用於根目錄下的靜態文件

爲了趕上靜態文件中的所有可能的目錄/子目錄,使用忽略與「條件」的規則,就像這樣:

routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" }); 
+0

這個問題不明確,但對於我忽略文件擴展名往往意味着你想在全球範圍內做到這一點(包括子目錄)。這個答案完成了,而接受的答案沒有。 –

相關問題