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

mac*_*x0r 3 c# asp.net-core-mvc asp.net-core asp.net-core-1.1

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

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

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

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

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

欢迎任何建议.

mwi*_*ski 11

使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!!我终于弄清楚了我需要的东西,而且效果很好!这是我找到的文章:http://blog.planetdiego.com/2016/10/aspnet-core-where-did-my-httpcontext-go.html看来我的星期五晚上将是一个学习之夜(好极了)。 (3认同)