Asp.net mvc 5 httpcontext和httpcontextbase之间需要一个公共对象

Asp.net mvc 5 httpcontext和httpcontextbase之间需要一个公共对象,asp.net-mvc-5,asp.net-web-api2,Asp.net Mvc 5,Asp.net Web Api2,我正在使用基于asp.NETMVC5和asp.NETWebAPI2OWIN的web应用程序。 第一个是网站,第二个是后端api 我需要分享一些图书馆, 在asp.net mvc应用程序中,我可以访问HttpContextBase.Request,它是HttpBaseRequest 在web.api中,可以访问httpContext.Request,该请求是HttpRequest 计划在将来升级到asp.net core,在我的类库中共享公共对象的最佳方式是什么?您可以定义一个表示访问httpco

我正在使用基于asp.NETMVC5和asp.NETWebAPI2OWIN的web应用程序。 第一个是网站,第二个是后端api

我需要分享一些图书馆, 在asp.net mvc应用程序中,我可以访问HttpContextBase.Request,它是HttpBaseRequest 在web.api中,可以访问httpContext.Request,该请求是HttpRequest


计划在将来升级到asp.net core,在我的类库中共享公共对象的最佳方式是什么?

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

然后,提供特定于您的库和应用程序正在处理的框架的实现。net framework和.net mvc以及dotnet core分别为http内容、请求和响应定义了不同的实现

e、 g

然后,暴露你所需要的。e、 g.GetRequestPath、WriteToResponse、GetHeader、SetCookie。等等,这将是大量的和正在进行的工作,但结果是,您的netstandard库(顺便说一句,其中一个应该承载您的接口)不会关心实施。显然,您必须将特定http对象的所有用法替换到接口中

因此,IMyHttpContext将转到一个新的netstandard程序集。该程序集将与所有dotnet框架一起工作

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

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

然后,在整个应用程序中,无论是net45还是netcore,再加上一些DI设置,您只参考您的界面。实现可以被注入

祝你好运

interface IMyHttpContext

class Net4HttpContext : IMyHttpContext

class NetCoreHttpContext : IMyHttpContext