将 HttpModule .Net Class 库移植到 .Net Core Web API

Porting HttpModule .Net Class Library to .Net Core Web API

我正在将项目从 .net Web 应用程序迁移到 .Net 核心 Web API。

我在 IIS 集成模式下使用作为 .net 框架 class 库的 HTTP 模块。

所以,我想按原样移植到我的新核心应用程序。

我将 web.config 粘贴到我的新核心应用程序并添加了对该 Http 模块的项目引用,它开始工作了。

我的 BeginRequest 方法中有一些 Context.Response.Write,每当我调用我的网站时,我都可以看到这些行 api。

但是,我在这里有一些问题。

  1. 模块中没有断点。
  2. 我以为没有加载任何符号,所以我查看了 VS 中的模块 window,但没有加载这样的模块。
  3. 非核心项目加载到核心项目时加载符号的任何方式。
  4. 想知道如何在不加载引用的情况下调用模块。

有人可以就以上几点分享一些意见吗?

谢谢。

HTTP 模块是经典 ASP.NET/IIS 应用程序模型的一个概念。

ASP.NET核心不使用IIS的事件系统,IIS收到的请求转发给ASP.NET核心应用,由这个应用处理并返回。

如果您在 web.config 中使用 http 模块,则不能很好地保证它有机会在正确的时间处理 request/response 的部分内容。此外,如果您让模块排序正常工作,您将无法在 IIS 之外托管应用程序 - 您实际上是 运行 ASP.NET Core 和 ASP.NET side-by-side .

如果您想将 module-like 功能移植到 ASP.NET 核心应用程序,最好的起点是中间件。 middleware in ASP.NET Core 是处理管道的一部分,可以在应用程序定义的管道中的某个点处理传入请求和传出响应。

ASP.NET 核心不支持 HTTP 模块,管道已完全重新设计。它只是被调用,因为你告诉 IIS 运行 它,但就你的应用程序而言,它不会有任何可见性(IIS 对你在核心世界中的应用程序 "external")。

微软在这里有一些关于转换到新的中间件系统的不错的文档(太多了 re-post 或浓缩成一个答案):

https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules