asp.net 是否可以指定NET6中间件执行顺序以在IIS生命周期的早期运行

pod7payv  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(147)

我有一个在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请求中?

8zzbczxx

8zzbczxx1#

阻止您更改执行顺序的原因是ASP.NET核心模块会将自己与IIS RQ_EXECUTE_REQUEST_HANDLER事件挂钩,如源代码所示。然后,ASP.NET核心运行时将由该模块初始化,所有中间件代码随后执行。因此,对您来说,这可能还不够早。
您可以阅读IIS参考1/2以了解有关这些事件的更多信息。
然而,挂钩到这个事件的决定是由于各种各样的原因,包括功能范围和兼容性范围。
因此,在您的情况下,您应该能够从下面的选项中进行选择,

  • 将逻辑移到.NET Framework 4.x模块或本机IIS模块,以便此自定义模块挂钩到早期事件。

如果需要,您可以在自定义模块和ASP.NET核心中间件之间共享数据,尽管很明显,跨越边界并不容易。

  • 通过修改源代码,构建您自己的ASP.NET核心模块,以便挂钩到您喜欢的任何事件。

但这是一个巨大的决定,因为在这条道路上,你需要维护一个分叉,并积极跟踪安全补丁。移动事件挂钩也可能破坏一些ASP.NET核心功能,因为它们可能不是设计为早期运行的。

参考文献

相关问题