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')

  • 相关阅读:
    Linux下Subversion的使用
    python3之HTML、CSS学习
    Python成长之路 常用模块与正则表达式
    Css3 列表布局 两列或者多列布局整理
    .net 通过代码控制GridView显示列
    .net 创建一个页面级全局datatable的方法
    .net 将分页展示的GridView的全部数据 导出excel
    .net 如何判断dataset是否为空
    sql 全表结构备份
    sql 把一个表中的某一列赋值到另一个表中的某一列
  • 原文地址:https://www.cnblogs.com/clis/p/14463966.html
Copyright © 2011-2022 走看看