2011-06-08 64 views
30

請求我的CSS提供靜態文件,JS,圖像文件正在通過ASP.NET管道服務。我認爲默認情況下IIS會避免這種情況,但是我看到了我的Application_AuthenticateRequest斷點上的請求,並且沒有必要實際驗證這些請求。我看到了衝突的方法來改變這種行爲 - 做到這一點的最好方法是什麼?防止IIS通過ASP.NET管道

回答

34

我在這裏採取了猜測和懷疑,你已經在你的web.config文件中配置以下設置:

<modules runAllManagedModulesForAllRequests="true"> 

這意味着每一項要求,其中包括靜態內容的擊球管道。

更改此設置:

<modules runAllManagedModulesForAllRequests="false"> 

這是假設你的應用程序是ASP.NET 4.0和MVC3下運行。

對於這個工作,你需要安裝KB980368(需要重新啓動)或Windows 2008 R2 SP1(其中包括此修復程序)。這樣做的原因是這個優秀的文章中解釋:

How ASP.NET MVC Routing Works and its Impact on the Performance of Static Requests

+0

這個工程,但我真的不想改變那個設置,因爲它影響其他的東西。希望替代 – kenwarner 2012-02-07 01:01:50

+1

@qntmfred - 哦,再次你好:)。任何機會,你可以更新你的問題,並解釋你的意思*,「因爲它影響其他的東西。」*? – Kev 2012-02-07 01:07:03

+0

當然,但我必須記住它是什麼第一個>。< – kenwarner 2012-02-07 01:44:30

0

某處或者您的IIS配置,或web.config中,你有一個處理程序映射設置爲這些文件映射到你的ASP.Net應用程序。

嘗試刪除你的web.config,看看您是否仍然可以從IIS中瀏覽到這些文件類型不ASP.Net。如果失敗,你會知道它是你的web.config - 否則你將不得不檢查IIS設置。

第2步 - 將web.configs回來,然後刪除並重新創建網站 - 同樣的問題?這是IIS根目錄中的設置,意味着它適用於所有站點 - 請在此處檢查處理程序映射。

12

我最終加入這我的web.config。我知道我的所有靜態文件都存在於這些文件夾中,所以它可以滿足我的需求。

<location path="scripts"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="styles"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="images"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
+0

「路徑」屬性允許多個值?根據以下鏈接他們不是:http:// stackoverflow。com/questions/4608764 /指定多於一個目錄在web-configs-location-path-element – UserControl 2012-02-06 12:05:41

+0

這太糟糕了。 – 2012-02-12 01:43:21

+6

這只是防止身份驗證,但靜態文件請求仍然擊中您的託管模塊。 @Kev有正確的答案。 – vtortola 2012-02-13 16:48:21

1

在啓用Visual Studio Development Server的VS2012/MVC3中,RAMMFAR = false不起作用。每個對靜態文件的請求仍然會觸發Application_BeginRequest事件處理程序。

我切換到IIS Express和看到所需的功能。