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


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

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

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

因為這樣會讓所有的請求都要經由 .NET 來處理,不管是什么路徑文件,這樣確實能解決當前的問題。

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

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

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

image

經網上查找,找到了一個看起來比較好的解決方案。如上圖所示,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM