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

Posted

技术标签:

【中文标题】将 HttpModule .Net 类库移植到 .Net Core Web API【英文标题】:Porting HttpModule .Net Class Library to .Net Core Web API 【发布时间】:2018-09-03 14:47:41 【问题描述】:

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

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

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

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

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

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

    模块中没有断点。 我以为没有加载任何符号,所以我查看了 VS 中的“模块”窗口,但没有加载此类模块。 当非核心项目加载到核心项目中时加载符号的任何方式。 想知道如何在不加载引用的情况下调用模块。

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

谢谢。

【问题讨论】:

也许这会有所帮助***.com/questions/3016908/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案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 是处理管道的一部分,可以在应用程序定义的管道中的某个点处处理传入请求和传出响应。

【讨论】:

以上是关于将 HttpModule .Net 类库移植到 .Net Core Web API的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net 5 类库中未引用 Mscorlib

我可以从 HttpModule 实例中放弃 InProc ASP.NET 会话吗

可移植类库:推荐替换 [Serializable]

ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析

ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析

HttpApplication处理对象与HttpModule处理模块