如何在ASP 4.5类库项目中访问ASP Core HttpContext?

时间:2016-05-19 12:37:43

标签: asp.net-core asp.net-core-mvc

我的<scope>import</scope>网站依赖于业务逻辑项目,该项目是使用ASP 4.5构建的类库。最近为了扩展开发,我计划引入额外的网站项目.Net v4.5。为此,我添加了业务逻辑项目的依赖项。业务逻辑当前通过ASP Core实例评估requestcookiessession相关内容。当我通过HttpContext.Current网站访问业务逻辑时,这不起作用。

Access HttpContext.Current

我已经解决了上述问题,并且当我通过ASP Core访问时,可以知道为什么ASP Core显示为HttpContext.Current。并且它的答案建议通过依赖注入填充引用类型null。现在,问题是,这个接口属于库IHttpContextAccessor,我没有看到将其添加到我的业务逻辑项目的方法。

有人请帮助我访问我的业务逻辑项目中的Microsoft.AspNet.Http

1 个答案:

答案 0 :(得分:1)

我有同样的需要。我解决它的方法是创建我自己的接口,这些接口存在于我的类库中,我使用这些接口来访问当前的HttpContext,无论该库是在4.5 http上下文还是MVC Core http上下运行。

为了进一步解释,ASP 4.5框架和ASP核心框架都有一个带有相关Request和Response对象的HttpContext对象,但是它们在不同的命名空间中定义,并且两个框架都不知道其他框架的命名空间。所以我决定我需要我的库代码才能访问在我的一个命名空间中定义的IHttpContext。并且IHttpContext将使用IHttpRequest和IHttpResponse,它们也在我的库的命名空间中定义。最后,IHttpRequest使用在我的命名空间中定义的ISession,IHeaders和ICookies。

通过定义这些接口,在我的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的确认。 / p>

最后一点,为了帮助导航名称冲突,我实际上用这种方式命名我的接口:

IAppHttpContext
IAppHttpRequest
IAppHttpResponse
IAppHttpSession
IAppHttpRequestHeaders
IAppHttpRequestCookies

请注意,并非所有HttpContext 4.5中可用的功能都可在MVC Core中使用。两者非常相似,但存在一些差异。最大的区别是MVC Core Session只能存储字节数组或字符串,而4.5会话可以存储对象。所以我的IAppSession只支持存储字节数组和字符串,我必须确保我所有的库会话需要使用它(我需要在会话中存储的所有对象都需要序列化)。

您可以想象,实现这一点有点工作,但最终您将拥有一个可以访问HttpContext的库,而不管它是在4.5 HttpContext还是MVC Core HttpContext下运行。有点整洁。

祝你好运。