【问题标题】:.NET Core 2.1 Manage Session variables.NET Core 2.1 管理会话变量
【发布时间】:2019-10-24 19:42:38
【问题描述】:

我是 .Net 核心的新手,我正在尝试在控制器类之外管理和访问会话变量。

会话变量设置正确,我可以在调试期间看到它们,但在每次请求时都会丢失。 请给我建议解决方案,否则我出了什么问题。

谢谢,

萨蒂什

下面是代码

//Statup.cs : 
////Added the below two lines in the ConfigureServices() method
services.AddSession(options => {options.IdleTimeout = TimeSpan.FromMinutes(30);});            
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

////Added the below two lines in the Configure() method
app.UseSession();
Sessions.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());

//Session.cs : Static class to handle session variables
using Microsoft.AspNetCore.Http;
using System;

namespace Dsms.Website.Helper
{
    public static class Sessions
    {
       private static IHttpContextAccessor _httpContextAccessor;

        public static void Configure(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public static Guid UserId
        {
            get { return Guid.Parse(_httpContextAccessor.HttpContext.Session.GetString("UserId")); }
            set { _httpContextAccessor.HttpContext.Session.SetString("UserId", value.ToString()); }
        }
    }
}

//BaseController.cs: 
////Constructor
public BaseController(IApplicationSettings applicationSettings, IServiceClient serviceClient, ICacheProvider cacheProvider, IHttpContextAccessor httpContextAccessor)
{
    _applicationSettings = applicationSettings;
    _serviceClient = serviceClient;
    _cacheProvider = cacheProvider;
    _httpContextAccessor = httpContextAccessor;

    //===> On every request the session variable is null here and so it calls DB.
    if (string.IsNullOrEmpty(Sessions.UserId))
    {
        GetUserDetails();
    }
}

//// Method GetUserDetails()
 public List<UserModel> GetUserDetails()
{
    ////Get user details from DB 
    //.
    //.
    //.
    //// Assign value to the session variables obtained from DB
    Sessions.UserId = user.UserId;
}

【问题讨论】:

  • 尊敬的专家,我正在等待您的宝贵建议。

标签: c# asp.net session


【解决方案1】:

在Startup类的ConfigureServices方法中,设置options.CheckConsentNeeded = context => false;

那么会话在每个请求中都保持了。

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2019-02-24
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多