2009-07-20 39 views
6

我的身份驗證HttpModule存在問題。問題在於,它顯然會針對我在Web服務器(IIS7)上獲得的每個請求運行。因爲它也使用Session變量,所以它無法在CSS,JS文件和類似文件上正常工作。從IIS7上的靜態內容運行排除HttpModule

我試着使用:

<add name="AuthModuleName" type="..." preCondition="managedHandler" /> 

,但無濟於事。它仍然在每個請求上運行,而不管其擴展名或MIME類型。我還應該補充說,有一個設置

<modules runAllManagedModulesForAllRequests="true"> 

這似乎對我可疑,實際上已禁用模塊上的preConditions。但將其更改爲false,會以完全不同的方式和不同的異常中斷應用程序(SessionStateTempDataProvider需要啓用SessionState)。

任何人都可以幫助我如何強制IIS7在請求靜態內容文件時排除我的HttpModule?

+0

順便說一句,你肯定這是IIS7,而不是ASP.NET開發服務器,對不對?只是雙重檢查。 – 2009-07-21 06:43:37

+0

我100%肯定... – 2009-07-21 15:20:20

回答

3

runAllManagedModulesForAllRequests屬性設置爲實際配置任何模塊,你想要的方式。您還必須根據需要正確地重新配置會話和其他會話,但主要是處理請求的處理程序管道執行順序。

答案在one of my other questions提供:

感謝彼得前提是正確地工作的答案。

1

我不知道IIS7的設置,但你可以做到這一點。

會話對象將只適用於非靜態內容:

void yourEventHandler(object sender, EventArgs e) { 
    HttpApplication app = (HttpApplication)sender; 
    if (app.Context.Session == null) { 
     return; 
    } 
    // then your code here... 
} 

這將確保你的代碼不會像CSS,JS等文件中運行,但要記住會話對象會在PostAcquireRequestState事件之前還沒有準備好。 (對於HttpApplication事件的順序,請參閱this page。)

編輯:此外,它與ASP.NET開發服務器出現(雖然我知道你在提問時說IIS7),您的HttpModule仍將即使運行靜態文件。