我需要在提供页面之前进行一些验证。如果验证正常,则请求应遵循其正常流程;如果没有,它必须重定向到另一个页面,在该页面中,用户将看到类似协议的内容,接受它,之后页面应该正常加载。
所以,我有一个应用程序在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。
提前致谢!
答案 0 :(得分:1)
应用程序在经典模式下使用其App Pool。
在经典模式下,ASP.NET管道仅为ASP.NET请求激活。因此,如果路径以“.asp”结尾,则模块将不会触发。但是在integrated pipeline mode中,它会针对每个请求触发,包括图像,CSS文件和是,传统的ASP文件。
因此,您需要将实现切换为使用集成管道模式,并将模块添加到名为system.webserver
的配置部分而不是system.web
。您可能需要修改模块,以便忽略对静态资源(例如图像和CSS)的请求,并且只查看以.aspx和.asp(以及可能的.ashx或您使用的任何其他扩展名)结尾的请求。