我也有同样的需求。我解决这个问题的方法是创建自己的接口,这些接口存在于我的类库中,我使用这些接口来访问当前的 HttpContext,而不管库是在 4.5 http 上下文还是 MVC Core http 上下文下运行。
为了进一步解释,ASP 4.5 框架和 ASP Core 框架都有一个 HttpContext 对象以及关联的 Request 和 Response 对象,但是它们定义在不同的命名空间中,并且两个框架都不知道其他框架的命名空间。所以我决定我需要我的库代码来访问在我的命名空间之一中定义的 IHttpContext。并且 IHttpContext 将使用在我的库的命名空间中定义的 IHttpRequest 和 IHttpResponse。最后,IHttpRequest 使用了在我的命名空间中定义的 ISession、IHeaders 和 ICookie。
定义了这些接口后,在我的 ASP 4.5 网站中,我现在可以在 Web 层基于我的 IHttpContext 创建一个 HttpContext 类,并让该类基本上包装 ASP 4.5 HttpContext 对象。然后可以将我的 HttpContext 对象传递到我的库中使用。
在我的 MVC Core 网站中,我现在可以在 Web 层基于我的 IHttpContext 创建一个 HttpContext 类,并让该类基本上包装 MVC Core HttpContext 对象。然后可以将我的 HttpContext 对象传递到我的库中以供使用,就像我在 ASP 4.5 环境下运行时一样。
所以最后,我的库不知道它在后台实际访问的是哪个 HttpContext 对象(4.5 或 Core),因为它只知道该对象有权访问它的库中定义的 IHttpInterface 确认。
最后一点,为了帮助解决名称冲突,我实际上是这样命名我的接口的:
IAppHttpContext
IAppHttpRequest
IAppHttpResponse
IAppHttpSession
IAppHttpRequestHeaders
IAppHttpRequestCookies
请注意,并非 HttpContext 4.5 中可用的所有功能都在 MVC Core 中可用。两者非常相似,但有一些不同之处。最大的区别是 MVC Core Session 只能存储字节数组或字符串,而 4.5 的 session 可以存储对象。所以我的 IAppSession 只支持存储字节数组和字符串,我必须确保我的库的所有会话都需要使用它(我需要存储在会话中的所有对象都需要可序列化)。
你可以想象,实现这个有点工作,但最终你将拥有一个可以访问 HttpContext 的库,而不关心它是在 4.5 HttpContext 还是 MVC Core HttpContext 下运行。有点整洁。
祝你好运。