在 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 设置,您都只引用您的界面。实现被注入。
祝你好运。
我正在使用 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 设置,您都只引用您的界面。实现被注入。
祝你好运。