天天看點

不要随便使用 runAllManagedModulesForAllRequests="true" 來解決問題

在 IIS 7.0 中,對于使用 Url 路由 通路頁面的 ASP.NET 應用程式,IIS可能會不能出 Url 是對 ASP.NET 的請求。

會顯示404啊,403啊之類的錯誤代碼(因為路徑不存在,或者不允許檢視目錄)。

網上一般的解決方案比較“粗暴”,直接設定 runAllManagedModulesForAllRequests="true" 即可。

因為這樣會讓所有的請求都要經由 .NET 來處理,不管是什麼路徑檔案,這樣确實能解決目前的問題。

但是這樣會讓所有的請求都經 .NET 處理(剛才好像說過了╮(╯-╰)╭),一方面會讓 .NET 比較累,所有靜态檔案請求也需要處理。

另一方面,也可能會讓程式的内容變得更複雜,比如如果有代碼會根據請求的 Url 來處理一些事情。

是以,既然是 Url 的問題,那麼盡量就不要給别人添麻煩(>﹏<)

不要随便使用 runAllManagedModulesForAllRequests="true" 來解決問題

經網上查找,找到了一個看起來比較好的解決方案。如上圖所示,Url 路由是由 UrlRoutingModule 這個子產品來處理的。

在某些 IIS 版本中,并不會将所有請求交給 UrlRoutingModule 處理,是以,我們可以在 Web.config 中進行如下設定:

<system.webServer>
    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
  </system.webServer>
</configuration>      

首先移除掉原有的 UrlRoutingModule,然後再添加一下,不過這次添加将把 preCondition 設為空,這樣貌似就可以了~

具體 preCondition 的可選值可以看這裡:

https://www.iis.net/configreference/system.webserver/modules/add

感覺 runAllManagedModulesForAllRequests="true" 太不友好了,以後如果再遇到相關的問題,還是要找到對應的子產品來進行針對性的處理比較好。

要刨根問底~

以上方法搜集自網絡:

http://www.cnblogs.com/xishuai/p/Styles-Render-runAllManagedModulesForAllRequests-true.html

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

輸了你,赢了世界又如何...