zoukankan      html  css  js  c++  java
  • .NET5.0 MVC Session 的使用

    开篇日常立个flag...

    一、在 MVC Controller 中使用 Session

    1、在 MVC 中使用 Session

    //在 Startup.cs 文件中的 ConfigureServices 中添加
    services.AddSession(options => options.IdleTimeout = TimeSpan.FromMinutes(30));
    //或者 services.AddSession();
    
    //在 Startup.cs 文件中的 Configure 中添加
    app.UseSession();

    2、在 MVC Controller 中使用 HttpContext.Session

    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            HttpContext.Session.SetString("code", "123456");
            return View();
        }
    }
    

     二、在非 Controller 中使用 Session

    这里有个问题,为什么在 Controller 中使用 HttpContext.Session 就可以,在其他地方就不行了呢?

    MVC 的 Controller 继承了 ControllerBase,ControllerBase 里面定义了 HttpContext 等一系列属性,所以可以使用。

    1、如果不是在 Controller 里,可以注入 IHttpContextAccessor

    //在 Startup.cs 文件中的 ConfigureServices 中添加
    services.AddHttpContextAccessor();

    2、自定义类使用 Session

    public class SessionTestClass
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private ISession _session => _httpContextAccessor.HttpContext.Session;
    
        public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    
        public void Set()
        {
            _session.SetString("code", "123456");
        }
        public void Get()
        {
            string code = _session.GetString("code");
        }
    }
    

    三、对 ISession 进行扩展

    没错,这一部分也是抄的……一棵树 的 .NET Core Session的使用方法

    public static class SessionExtensions
    {
        public static void SetObjectAsJson(this ISession session, string key, object value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }
    
        public static T GetObjectFromJson<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
    
            return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
        }
    }

    参考来源

    https://www.cnblogs.com/atree/p/netcore-session.html(zock 的 .NET Core Session的使用方法)

    https://www.cnblogs.com/asd14828/p/11136814.html(lappple 的 Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor')

  • 相关阅读:
    线阵相机、镜头及光源的选型
    查看mysql数据库容量大小
    mysql 表分区操作
    VC++ 全局变量定义
    sql按半小时统计
    sqlserver/mysql按天、按小时、按分钟统计连续时间段数据
    相机光学 接圈
    Excel中如何锁定部分单元格内容不被修改?
    VC++ 捕获不了异常
    mysql 数据库存储路径更改
  • 原文地址:https://www.cnblogs.com/clis/p/14463966.html
Copyright © 2011-2022 走看看