会话不起作用并在视图中返回 Null



我不知道在哪里寻找这个;我是 asp.net 核心的新手,会话对象一直工作到今天。

这是我的创业课

public Startup(IHostingEnvironment hostingEnvironment, IConfiguration configuration, ILoggerFactory loggerFactory)
    {
        Configuration = configuration;
        this.extensionsPath = hostingEnvironment.ContentRootPath + this.Configuration["Extensions:Path"];
        this._hostingEnvironment = hostingEnvironment;
    }
    public IConfiguration Configuration { get; }
    public IHostingEnvironment _hostingEnvironment;
    private string extensionsPath;
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<RazorViewEngineOptions>(options => {
            options.ViewLocationExpanders.Add(new ViewLocationExpander(_hostingEnvironment));
        });

        services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContext‌​Accessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
        services.AddTransient<IBusinessServiceLocator, BusinessServiceLocator>();
        services.AddTransient<IBusinessApiCalls, BusinessApiCalls>();
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
        services.AddTransient<IUserService, UserService>();
        services.AddAuthorization(o =>
        {
            o.AddPolicy("policyforcontrollers", b =>
            {
                b.RequireAuthenticatedUser();
            });
        });
        services.RegisterDataTables();
        services.AddMemoryCache();
        services.AddSession(opt =>
        {
            opt.Cookie.IsEssential = true;
        });
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
           .AddCookie(options =>
           {
               options.LoginPath = "/usr/login";
               options.LogoutPath = "/usr/logout";
           });
        services.AddExtCore(this.extensionsPath);
        services.AddMvc(options =>
        {
            options.Conventions.Add(new AuthorizeControllerModelConvention());
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseSession();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
               name: "areas",
               template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
             );
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
        app.UseExtCore();
    }

这是我的会话助手

public static class SessionExtensions
{
    public static void SetJson(this ISession session, string key, object value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }
    public static T GetJson<T>(this ISession session, string key)
    {
        var sessionData = session.GetString(key);
        return sessionData == null ? default(T) : JsonConvert.DeserializeObject<T>(sessionData);
    }
}
public  class SessionObject
{
    public static string User { get; } = "USER";
}

从用户控制器我设置会话

    await LoginAsync(user);
    HttpContext.Session.SetJson(SessionObject.User, user);

并从视图中访问会话对象为

 @{
     ViewBag.Title = "Home";
     Layout = "_Layout";
     var session = Context.Session.GetJson<LoggedInUser>(SessionObject.User);
 }

视图中的会话对象为 Null,我注意到的是来自用户控制器的会话 ID 和视图中的会话对象 ID 不同。我找不到它不再起作用的原因。我错过了什么?

在 CookieCookiePolicyOptions 中,将 CheclConsentRequired 设置为 false。

services.Configure<CookiePolicyOptions>(options =>
{
  options.CheckConsentNeeded = context => false;
  options.MinimumSameSitePolicy = SameSiteMode.None;
});

最新更新