.Net Core 3 在非控制器使用HttpContext.Current/Session

作者:outlela  来源:本站原创   发布时间:2020-8-30 16:11:33

.NET CORE 3 中已经没有HttpContext.Current,如果要使用,需要扩展IHttpContextAccessor来达到使用的目的。

1、扩展

namespace System.Web
{
    public static class HttpContext
    {
        private static IHttpContextAccessor _contextAccessor;


        public static Microsoft.AspNetCore.Http.HttpContext Current => _contextAccessor.HttpContext;


        internal static void Configure(IHttpContextAccessor contextAccessor)
        {
            _contextAccessor = contextAccessor;
        }
    }

    public static class StaticHttpContextExtensions
    {
        public static void AddHttpContextAccessors(this IServiceCollection services)
        {
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        }


        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
        {
            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
            HttpContext.Configure(httpContextAccessor);
            return app;
        }
    }
}

本例中,我们将扩展类放在System.Web命名空间中,主要是和以前的.Net Framework 保持一致,便于项目的迁移。

2、在Startup中注入

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSession();            
            services.AddHttpContextAccessors();
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseStaticHttpContext();
            app.UseSession();
        }

3、如果在使用过程中,出现 HttpContext.Current.Session.Id 随页面刷新而改变的情况,但是又不需要它改变,可以在写入Session前,随便写入一些值,如:

HttpContext.Current.Session.SetString("useri","dokeodkdmslsl");

这样就可以保证当前会话的 Session.Id 唯一,不受页面刷新而改变!

*本文最后修改于:2020-8-30 16:34:14
本文标签: .Net Core 3 非控制器 使用 HttpContext.Current Session SessionId
本文由本站原创发布, 本文链接地址:https://outlela.com/Code/91.html
转载或引用请保留地址并注明出处:outlela.com