IIS7的整合模式下如何讓自訂的HttpModule不處理靜態檔案(.html .css .js .jpeg等)請求

來源:互聯網
上載者:User

標籤:

今天將開發好的ASP.NET網站部署到客戶的伺服器上後,發現了一個非常頭疼的問題,那麼就是IIS7的應用程式集區是整合模式的話,ASP.NET項目中自訂的HttpModule會處理靜態檔案(.html .css .js .jpeg等)請求,而這不是我預期的效果,因為我只想讓託管檔案(aspx, ascx 及 MVC等)的請求被自訂HttpModule處理,但是我發現在IIS7的整合模式下所有請求都會進入HttpModule被處理。

 

後來我嘗試將IIS7網站下的應用程式集區改為了傳統模式,這樣的話靜態檔案的請求的確不會進入自訂HttpModule了,但是出現了另一問題ASP.NET項目中自訂的HttpHandler都訪問失敗了。。。這讓我頗為頭疼要麼不能用自訂HttpModule。要麼不能用自訂HttpHandler。

 

後來在網上找了資料才發現,ASP.NET 4.0後Web.config檔案的Module配置節點有一個可選項叫preCondition如下面代碼所示:

<system.webServer>  <modules>    <add name="MyModule" type="MyNamespace.MyModule" preCondition="managedHandler" />  </modules></system.webServer>

注意這個選項只有在IIS7才用到的<system.webServer>的<modules>配置項才有,在老IIS6的<system.web>的<httpModules>配置節點下是沒有的。加上了preCondition="managedHandler"這個配置項後,在IIS7的整合模式下,上面自訂的MyModule這個HttpModule就不會去處理靜態檔案(.html .css .js .jpeg等)的請求了,只會處理託管檔案(aspx, ascx 及 MVC等)的請求。

 

此外在<system.webServer>的<modules>節點上還有個配置項叫runAllManagedModulesForAllRequests如下面代碼所示:

<system.webServer>  <modules runAllManagedModulesForAllRequests="true">    <add name="MyModule1" type="MyNamespace.MyModule1" preCondition="managedHandler" />    <add name="MyModule2" type="MyNamespace.MyModule2" preCondition="managedHandler" />    <add name="MyModule3" type="MyNamespace.MyModule3" preCondition="managedHandler" />    <add name="MyModule4" type="MyNamespace.MyModule4" preCondition="managedHandler" />    <add name="MyModule5" type="MyNamespace.MyModule5" />  </modules></system.webServer>

如果你將runAllManagedModulesForAllRequests設定為true,那麼ASP.NET就會忽略<modules>所有子節點的preCondition設定,相當於上面代碼中MyModule1、MyModule2、MyModule3和MyModule4都沒有設定preCondition="managedHandler",MyModule1到MyModule5仍然會處理靜態檔案(.html .css .js .jpeg等)的請求,所以runAllManagedModulesForAllRequests相當於是一個快捷設定,可以關閉<modules>所有子節點的preCondition設定,強制使所有自訂的HttpModule既處理靜態檔案(.html .css .js .jpeg等)請求又處理託管檔案(aspx, ascx 及 MVC等)請求。

 

說了這麼多有了preCondition這個設定,大家又可以安心使用HttpModule了,希望對被坑過的同學有所協助!

 

IIS7的整合模式下如何讓自訂的HttpModule不處理靜態檔案(.html .css .js .jpeg等)請求

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.