在 httpcontext 和 httpcontextbase 之间需要一个公共对象

Need a common object between httpcontext and httpcontextbase

我正在使用 asp.net mvc 5 和 asp.net web api 2 基于 owin 的 Web 应用程序。 第一个是网站,第二个是后台api.

我需要共享一些库, 在 asp.net mvc 应用程序中我可以访问 HttpContextBase.Request 这是一个 HttpBaseRequest 在 web.api 中可以访问 httpContext.Request 即 HttpRequest

计划将来升级到 asp.net 核心,在我的 class 库中共享一个公共对象的最佳方法是什么?

您可以定义一个表示对 httpcontext 的访问的接口,但不将其绑定到任何特定的与 http 相关的类型

然后,提供特定于您的库和应用程序正在处理的框架的实现。 .net framework和.net mvc和dotnet-core分别为http contexf、request、response定义了不同的实现。

例如

interface IMyHttpContext

class Net4HttpContext : IMyHttpContext

class NetCoreHttpContext : IMyHttpContext

然后,暴露你所需要的。例如GetRequestPath、WriteToResponse、GetHeader、SetCookie。等..这将是很多正在进行的工作,但结果是,您的网络标准库(其中一个应该托管您的界面,顺便说一句)不会关心实现。显然,您必须将特定 http 对象的所有用法替换为您的界面。

因此,IMyHttpContext 转到一个新的网络标准程序集。该程序集将适用于所有 dotnet 框架。

Net4HttpContext 转到 net45 程序集,它本身引用 System.Webb。您仅通过 windows.net Framework 应用程序引用此应用程序。

NetCoreHttpContext 转到 dotnetcore 或 netstandard 程序集,引用 dotnet core 的 http 相关 nuget 包。将这个与 dotnet 核心应用程序一起使用。

然后,在您的整个应用程序中,无论它们是 net45 还是 netcore,以及一些 DI 设置,您都只引用您的界面。实现被注入。

祝你好运。