Asp.net HttpModule在目录级web.config中

Chr*_*ris 12 .net asp.net

我创建了一个自定义的http模块,并希望将此模块添加到Web配置中.Web应用程序是一个包含多个"子应用程序"的项目.子应用程序只是一个文件夹,在该文件夹中它有自己的web.config.我这样做是因为每个应用程序都有自己的应用程序相关内容,样式表,配置等.

现在我创建了一个自定义的http模块.将此添加到根web.config时,模块正常工作.将http模块配置添加到目录级web.config(例如/Applications/MyApplication/web.config)时,模块不再被初始化.即使msdn声明HttpModules配置元素也在目录级别工作.谁知道如何解决这个问题?

Aak*_*shM 15

为了呼应马文斯密特的评论,似乎配置<modules>下,<location>web.config根本不工作 -以这种方式指定的任何模块不被调用.

可以做的是在根级别指定模块,并由a控制appSetting,可以根据需要分层指定和覆盖:

<configuration>


  <appSettings>
    <add key="UseCustomModule" value="false"/>
  </appSettings>


  <location path="MyFolder">
    <appSettings>
      <add key="UseCustomModule" value="true"/>
    </appSettings>
    <system.webServer>
      <modules>
        <!-- CANNOT add module at this level, hence the overridden appSetting -->
      </modules>
    </system.webServer>
  </location>

  <system.webServer>
    <modules>
      <add name="CustomnModule" type="MyApplication.CustomModule" />
    </modules>
  </system.webServer>

</configuration>
Run Code Online (Sandbox Code Playgroud)

然后在代码中CustomModule:

    private static bool ModuleEnabled()
    {
        bool appSetting;
        if (!bool.TryParse(ConfigurationManager.AppSettings["UseCustomModule"], 
                           out appSetting))
            appSetting = false;

        return appSetting;
    }
Run Code Online (Sandbox Code Playgroud)

ASP.NET将UseCustomModule确保我们当前位置的适当值是我们读取的值.