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

问题描述 投票:0回答:4

我正在努力将 ASP.NET 4.6 框架代码迁移到 .NET Core。我目前还处于学习阶段。我是 MVC 新手,因为我一直使用 WebForms,但我想放弃 WebForms。我也是 ASP.NET Core 的新手。

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

我发现 ASPNET Core 不太允许这样做。也许我不理解它,或者现在开始移植它还为时过早。

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

或者,我需要重新考虑编写类库吗?根据我的理解,我需要编写中间件来完成此任务。但我能找到的每个例子要么不完整,要么已经过时了。

欢迎任何建议。

c# asp.net-core asp.net-core-mvc asp.net-core-1.1
4个回答
15
投票

使用

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>();
    }
}

2
投票

Step1:在启动类 -> 在ConfigureServices中添加以下行

services.AddHttpContextAccessor();

Step2:在你的班级库中。例如。

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

1
投票

asp.netcore mvc 中,

HttpContext
在控制器范围之外不可访问。因此,您无法直接访问类库中的
HttpContext
。您必须通过其他方式访问它。

您可以将

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


0
投票

类库中有两种方式访问HTTPContext。

  1. 构造函数
  2. 为静态类场景创建实例

可以通过依赖注入来实现,将 httpcontext 注入到类中。我已经为这两种情况制定了代码示例,您可以参考here

© www.soinside.com 2019 - 2024. All rights reserved.