在 IIS 7.0 中,對于使用 Url 路由 通路頁面的 ASP.NET 應用程式,IIS可能會不能出 Url 是對 ASP.NET 的請求。
會顯示404啊,403啊之類的錯誤代碼(因為路徑不存在,或者不允許檢視目錄)。
網上一般的解決方案比較“粗暴”,直接設定 runAllManagedModulesForAllRequests="true" 即可。
因為這樣會讓所有的請求都要經由 .NET 來處理,不管是什麼路徑檔案,這樣确實能解決目前的問題。
但是這樣會讓所有的請求都經 .NET 處理(剛才好像說過了╮(╯-╰)╭),一方面會讓 .NET 比較累,所有靜态檔案請求也需要處理。
另一方面,也可能會讓程式的内容變得更複雜,比如如果有代碼會根據請求的 Url 來處理一些事情。
是以,既然是 Url 的問題,那麼盡量就不要給别人添麻煩(>﹏<)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIjM2kjNwkjMwkzM1EjNy8CX4ATNxAjMvwVM0UDM5QzLcd2bsJ2Lc12bj5ycn9Gbi52YuAzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
經網上查找,找到了一個看起來比較好的解決方案。如上圖所示,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
輸了你,赢了世界又如何...