【问题标题】:Is it possible to add an HttpModule to ASP Classic application?是否可以将 HttpModule 添加到 ASP Classic 应用程序?
【发布时间】:2018-05-25 19:42:06
【问题描述】:

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

所以,我有一个应用程序,它有一些关于 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 Configuration

提前致谢!

【问题讨论】:

  • 尝试将您的模块添加到system.webServer。这些模块会针对所有请求触发(除非您明确告诉他们不要这样做)。
  • 我的 web.config 上也有该配置,但它没有解决问题:/

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


【解决方案1】:

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

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

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

【讨论】:

  • 它似乎在工作,但它没有 :( 可能我需要做其他事情才能使其工作。我将应用程序池从经典更改为集成,但是 HttpModule当我请求 aspx 页面而不是 asp 时才通过。我注意到它是因为我试图从页面进行重定向但它不起作用
  • 我在问题上添加了我的应用程序池的屏幕截图。我尝试从经典更改为集成
猜你喜欢
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多