将 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的主要内容,如果未能解决你的问题,请参考以下文章
我可以从 HttpModule 实例中放弃 InProc ASP.NET 会话吗
ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析