【问题标题】:Asp.net MVC error with configured managed modules配置托管模块的 Asp.net MVC 错误
【发布时间】:2009-07-21 19:45:16
【问题描述】:

我有一个非常严格的自定义身份验证HttpModule。但我希望它只为托管请求运行(而不是静态请求)。

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",但由于父 &lt;module&gt; 元素上有 runAllManagedModulesForAllRequests="true",我的 preCondition 被设计忽略(正如我在 MSDN 上阅读的那样)。

当我尝试设置时:

<modules runAllManagedModulesForAllRequests="false">

我收到一个错误。

我还必须在web.config 中设置什么(其他模块)才能使此设置生效:

<modules runAllManagedModulesForAllRequests="false">

【问题讨论】:

    标签: asp.net-mvc iis-7 web-config httpmodule


    【解决方案1】:

    我认为您收到错误消息是因为您的应用程序依赖于某个其他托管模块 (Session),并且该模块被配置为仅针对托管处理程序的请求运行 (runAllManagedModulesForAllRequests="false")。

    您可以尝试以下设置来重新配置会话模块以针对所有请求运行

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

    【讨论】:

    • 谢谢彼得。问题是我将所有前置条件都定义为 managedHandler。它奏效了。
    【解决方案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>
    

    所以我在某些路径上禁用了身份验证。这是一种解决方法,而不是实际的解决方案。因此,您仍然可以提供自己的建议,甚至是实际解决 runAllManagedModulesForAllRequests="true" 默认 Asp.net MVC 配置的解决方案。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2012-05-09
      • 1970-01-01
      • 2012-12-28
      • 2011-03-22
      • 2013-07-23
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多