我有一个在IIS服务器上运行的NET 6 Web应用程序。服务器配置为使用IIS HTTPModules,它为网站上的每个应用程序执行逻辑,并钩住典型的事件,如开始_REQUEST()和POST_AUTHENTICATE()。
我知道NET 6不使用相同的事件处理模式,并且在我们的场景中,IIS管道/生命周期与NET 6管道/生命周期分开运行。
我已经通读了中间件文档,并且实现了以前的中间件组件。我正在尝试理解在经典的ASP.NET管道中,NET 6中间件在哪里开始工作。从我所知道的来看,NET 6中间件的执行顺序发生在POST_AUTHENTICATE之后的某个时间,这对我的逻辑来说太晚了。
中间件组件是否可以在开始_REQUEST级别或至少在POST_AUTHENTICATE之前被订购并注入到HTTP请求中?
1条答案
按热度按时间8zzbczxx1#
阻止您更改执行顺序的原因是ASP.NET核心模块会将自己与IIS
RQ_EXECUTE_REQUEST_HANDLER
事件挂钩,如源代码所示。然后,ASP.NET核心运行时将由该模块初始化,所有中间件代码随后执行。因此,对您来说,这可能还不够早。您可以阅读IIS参考1/2以了解有关这些事件的更多信息。
然而,挂钩到这个事件的决定是由于各种各样的原因,包括功能范围和兼容性范围。
因此,在您的情况下,您应该能够从下面的选项中进行选择,
如果需要,您可以在自定义模块和ASP.NET核心中间件之间共享数据,尽管很明显,跨越边界并不容易。
但这是一个巨大的决定,因为在这条道路上,你需要维护一个分叉,并积极跟踪安全补丁。移动事件挂钩也可能破坏一些ASP.NET核心功能,因为它们可能不是设计为早期运行的。
参考文献