是否可以将HttpModule添加到ASP Classic应用程序?

时间:2018-05-25 19:42:07

标签: c# asp.net asp-classic iis-8 httpmodule

我需要在提供页面之前进行一些验证。如果验证正常,则请求应遵循其正常流程;如果没有,它必须重定向到另一个页面,在该页面中,用户将看到类似协议的内容,接受它,之后页面应该正常加载。

所以,我有一个应用程序在ASP Classic上有一些页面,在ASP.NET中有一些页面。我试图做的是添加一个HttpModule来处理所有请求做一些逻辑,根据结果重定向到另一个页面。

因此,在IIS中,ASP应用程序位于其他应用程序的顶部,在该应用程序内部,我还有其他.NET应用程序。

我创建了一个HttpModule来测试它,注册了DLL并在ASP应用程序级别的web.config文件中添加了相应的配置。

这是我添加到web.config文件中的块

<system.web>
    <customErrors mode="Off"></customErrors>
    <httpModules>
        <add name="TestHttpModule" type="TestHttpModule.TestHttpModule, TestHttpModule,Version=1.0.0.0, Culture=neutral, PublicKeyToken=d76c51db0a9391cf"/>
    </httpModules>
</system.web>

模块只在请求ASPX页面时触发,但是在请求ASP页面时它不会触发。

那么可以为ASP页面使用自定义HttpModule吗?或者不可能?

如果没有,你知道其他任何一种做法吗?

应用程序在经典模式下使用其App Pool。

App Pool Configuration

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

应用程序在经典模式下使用其App Pool。

在经典模式下,ASP.NET管道仅为ASP.NET请求激活。因此,如果路径以“.asp”结尾,则模块将不会触发。但是在integrated pipeline mode中,它会针对每个请求触发,包括图像,CSS文件和是,传统的ASP文件。

因此,您需要将实现切换为使用集成管道模式,并将模块添加到名为system.webserver的配置部分而不是system.web。您可能需要修改模块,以便忽略对静态资源(例如图像和CSS)的请求,并且只查看以.aspx和.asp(以及可能的.ashx或您使用的任何其他扩展名)结尾的请求。