首页 > 解决方案 > Razor 会话数据 - HttpContextAccessor 为空

问题描述

我是 MVC5 新手,正在创建一个测试网站来查看 MVC5 和 Razor

用户登录后我有一个非常简单的站点,我需要通过“登录”中的 _Layout 更改菜单以添加“注销”“帐户”。

注意:该站点有自己的身份验证,稍后我将查看单点登录。

我真的很难在 MVC5 中管理会话数据,不确定哪个是最好的方法。我已经尝试过 TEMP DATA ,但是虽然我达到了顶峰,但我发现在用户在几页之间重定向后,数据丢失了。所以看着好的旧 cookie,但由于 GDPR,我可以看出对开箱即用的 cookie 的默认支持要少得多。

无论如何,在初创公司我相信我做的都是正确的

public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                                   options.CheckConsentNeeded = context => false;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });   
            services.AddDistributedMemoryCache();  
            services.AddSession(options =>
            {
                // Set session timeout value
                options.IdleTimeout = TimeSpan.FromSeconds(30);
                options.Cookie.HttpOnly = true;
            });
        }


services.AddMvc();
services.AddCaching(); 
services.AddSession();
services.AddHttpContextAccessor();

依赖项将其注入,但在我尝试调用 SetString 的 Post 中,“私有只读 IHttpContextAccessor _httpContextAccessor;” 一片空白

奇怪的是 _Layout 没有抛出相同的空异常

   @using Microsoft.AspNetCore.Http
   @inject IHttpContextAccessor HttpContextAccessor

   @{
        string UserId = HttpContextAccessor.HttpContext.Session.GetString("UserId");
   }

在 ASP.Net 工作之后,处理 Session 的简单方法,开始质疑我是否错过了一些东西,因为在 MVC5 中似乎有很多工作。那么我应该在 MVC5 中使用不同的方法吗

标签: c#asp.netasp.net-mvc-5

解决方案


options.CheckConsentNeeded = context => false;

这是真的,即

options.CheckConsentNeeded = context => true;

并且您的会话将不再为空。


推荐阅读