使用ASP.NET Core 1.1(MVC)访问类库中的httpcontext

时间:2017-04-20 19:24:54

标签: c# asp.net-core asp.net-core-mvc asp.net-core-1.1

我正在努力将ASP.NET 4.6框架代码迁移到.NET Core。我现在只处于学习阶段。我是MVC的新手,因为我总是使用WebForms,但我想离开WebForms。我也是ASP.NET Core的新手。

基本上,我有一个类库,可以完成我的大部分工作 - 使我免于在多个页面甚至网站上重复代码(数据库,会话,自定义身份管理)。我将DLL添加到项目中,它已准备就绪。

我发现ASPNET Core并不能完全允许这一点。也许我不理解它,或者也许现在开始移植它还为时过早。

我需要能够访问我的类库中的HttpContext来操作会话,cookie等等。最简单的方法是什么?我想一旦我能做到这一点,我就可以开始取得更好的进展。

或者,我是否需要重新考虑编写类库?根据我的理解,我需要编写中间件来实现这一目标。但我能找到的每一个例子都不完整或已经过时了。

欢迎任何建议。

4 个答案:

答案 0 :(得分:10)

HttpContext用于全方位逻辑并不是一个好主意,但如果您真的打算这样做,只需坚持一个SOLID原则,即。 依赖性倒置原则

ASP.NET MVC及其后继者,ASP.NET Core在这个原则上奠定了基础。 在需要它的类库的任何类的构造函数中注入IHttpContextAccessor

实施例

public class ContextHelper
{
    private IHttpContextAccessor _httpContextAccessor;

    public ContextHelper(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void DoStuff()
    {
        DoOtherStuffWith(_httpContextAccessor.HttpContext);
    }
}

请记住在默认IoC容器中的Startup中注册它,如下所示:

public class Startup
{
    // Rest of the class here...

    public void ConfigureServices(IServiceCollection services)
    {
        // Other registrations here...

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }
}

答案 1 :(得分:1)

asp.netcore mvc 中,HttpContext在控制器范围之外无法访问。因此,您无法直接访问类库中的HttpContext。你必须以其他方式访问它。

您可以将HttpContext发送到类库,从Controller的构造函数发送到类库类的构造函数,或发送到需要操作方法中当前HttpContext的特定库方法控制器。

答案 2 :(得分:0)

步骤 1:在启动类 -> 在 ConfigureServices 添加以下行

services.AddHttpContextAccessor();

步骤 2:在您的类库中。例如。

public class Dog
    {
        public HttpContext _httpContext => new HttpContextAccessor().HttpContext;
        public void Speak()
        {
            _httpContext.Response.WriteAsync("Dog says: Bow-Wow...\n");
        }
    }

答案 3 :(得分:-1)

ASP.net核心中,某些功能已从 HttpContex 中删除,并且访问方法已更改

您可以在ASP.net核心

中使用此方法

How to use sessions in a .net core 2.0 class library project