在 IIS 7.0 中,對於使用 Url 路由 訪問頁面的 ASP.NET 應用程序,IIS可能會不能出 Url 是對 ASP.NET 的請求。
會顯示404啊,403啊之類的錯誤代碼(因為路徑不存在,或者不允許查看目錄)。
網上一般的解決方案比較“粗暴”,直接設置 runAllManagedModulesForAllRequests="true" 即可。
因為這樣會讓所有的請求都要經由 .NET 來處理,不管是什么路徑文件,這樣確實能解決當前的問題。
但是這樣會讓所有的請求都經 .NET 處理(剛才好像說過了╮(╯-╰)╭),一方面會讓 .NET 比較累,所有靜態文件請求也需要處理。
另一方面,也可能會讓程序的內容變得更復雜,比如如果有代碼會根據請求的 Url 來處理一些事情。
所以,既然是 Url 的問題,那么盡量就不要給別人添麻煩(>﹏<)
經網上查找,找到了一個看起來比較好的解決方案。如上圖所示,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