2009-07-21 42 views
2

我有一個自定義身份驗證HttpModule,這是非常海峽。但我希望它只能運行託管的請求(而不是靜態的)。配置託管模塊的Asp.net MVC錯誤

Asp.net MVC會自動添加配置部分IIS7 Web服務器:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="ScriptModule" /> 
     <remove name="UrlRoutingModule" /> 
     <add name="ScriptModule" 
      preCondition="managedHandler" 
      type="System.Web.Handlers.ScriptModule,..." /> 
     <add name="UrlRoutingModule" 
      type="System.Web.Routing.UrlRoutingModule,..." /> 
    </modules> 
    <handlers> 
     ... 
    </handlers> 
</system.webServer> 

當我添加自己的模塊,我還設置了preCondition="managedHandler",但由於上級<module>元素有runAllManagedModulesForAllRequests="true"preCondition被設計忽略(正如我在MSDN上讀到的)。

當我嘗試設置雖然:

<modules runAllManagedModulesForAllRequests="false"> 

我得到一個錯誤。

還有什麼(這等模塊),我要在web.config設置此設置工作:

<modules runAllManagedModulesForAllRequests="false"> 

回答

3

我想你已經得到了錯誤消息,因爲您的應用程序依賴一些其他管理模塊(Session),並且該模塊被配置爲僅對託管處理程序的請求運行(runAllManagedModulesForAllRequests =「false」)。

你可以試試下面的設置會話模塊重新配置,爲所有請求

<modules> 
<remove name="Session" /> 
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" /> 
</modules> 
+0

謝謝彼得。事情是我將所有preConditions定義爲managedHandler。它的工作。 – 2009-07-22 16:10:41

2

好運行。所以我有解決這個問題的解決方法。 我仍不得不使用默認設置的模塊如:

<modules runAllManagedModulesForAllRequests="true"> 

但我可以通過設置特定的位置額外web.config中的條目像禁用我的自定義驗證模塊:

<location path="~/App_Themes"> 
    <system.web> 
     <authentication mode="None" /> 
    </system.web> 
</location> 

<location path="~/Content"> 
    <system.web> 
     <authentication mode="None" /> 
    </system.web> 
</location> 

<location path="~/Scripts"> 
    <system.web> 
     <authentication mode="None" /> 
    </system.web> 
</location> 

所以我禁用在某些路徑上進行認證這是一個解決方法,而不是一個實際的解決方案。因此,您仍然可以提供自己的建議,甚至可以提供實際解決默認Asp.net MVC配置的解決方案。