在ASP.NET Core中怎么使用HttpContext.Current

阅读本文可能需要三分钟

一、前言

最近学习使用ASP.NET Core,想获取当前请求的一些信息,例如一些用户信息,session,cookie等,但发现ASP.NET Core 中HttpContext.Current是不能直接点出来的。当然我们也可以通过在Controller中访问HttpContext,但是某些情况下,这样使用起来还是不如HttpContext.Current方便。

二、自己模拟一个HttpContext.Current

利用ASP.NET Core的依赖注入容器系统,通过请求获取IHttpContextAccessor接口,我们拥有模拟使用HttpContext.Current这样API的可能性。但是因为IHttpContextAccessor接口默认不是由依赖注入进行实例管理的。我们先要将它注册到ServiceCollection中,所以来到Startup.cs这个文件中,找到以下配置方法,添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton();

    // Other code...
}

然后写一个自己的HttpContext,建议公共引用的文件夹,新建一个类,代码如下:

public static class HttpContext
    {
        public static IServiceCollection serviceCollection;

        public static Microsoft.AspNetCore.Http.HttpContext Current
        {
            get
            {
                object factory = serviceCollection.BuildServiceProvider().GetService(typeof(IHttpContextAccessor));
                Microsoft.AspNetCore.Http.HttpContext context = ((HttpContextAccessor)factory).HttpContext;
                return context;
            }
        }

    }

然后我们回到Startup类中,因为上面HttpContext类中的public static IServiceCollection serviceCollection是没有被赋值的,所以要给其赋值,加上以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton();
    CoreTest.Common.HttpContext.serviceCollection = services; 
    //CoreTest.Common是命名空间

    // Other code...
}

这样我们就可以像在以前ASP.NET中一样,在ASP.NET Core中也可以使用CoreTest.Common.HttpContext.Current了。

三、福利反馈

关注以下公众号,无套路免费获取编程资料


在ASP.NET Core中怎么使用HttpContext.Current_第1张图片
在ASP.NET Core中怎么使用HttpContext.Current_第2张图片

你可能感兴趣的:(在ASP.NET Core中怎么使用HttpContext.Current)