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

时间:2018-03-25 10:32:24

标签: c# .net .net-core asp.net-core-webapi httpmodule

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

我正在使用HTTP模块,它是.net框架类库,在IIS集成模式下。

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

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

我在BeginRequest方法中有一些Context.Response.Write,每当我打电话给我的web api时,我都可以看到这些行。

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

  1. 模块中没有断点。
  2. 我认为没有加载任何符号,所以我查看了VS中的Modules窗口但没有加载这样的模块。
  3. 当非核心项目加载到核心项目中时,以任何方式加载符号。
  4. 想知道如何在不加载引用的情况下调用模块。
  5. 有些人可以分享以上几点的一些意见。

    THX。

2 个答案:

答案 0 :(得分:3)

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

微软在这里转换到新的中间件系统时有一些不错的文档(太多了,不能重新发布或压缩成答案):

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

答案 1 :(得分:2)

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

ASP.NET Core不使用IIS'事件系统,IIS收到的请求被转发到ASP.NET Core应用程序,由此应用程序处理并返回。

如果您在web.config中使用http模块,则不能很好地保证它有机会在适当的时间处理部分请求/响应。此外,如果您的模块订购工作正常,您将无法在IIS之外托管应用程序 - 您将有效地并行运行ASP.NET Core和ASP.NET。

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