• Asp.net Core中使用Session


    Asp.net Core验证码登录遇到两个小问题

    第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。

    第二就是使用Session的问题,Core里使用Session需要添加Session类库。

    第一步:在你的项目上基于NuGet添加:

    install-package  Microsoft.AspNetCore.Session -ver 2.0

    install-package Microsoft.AspNetCore.Http.Extensions -ver 2.0

    第二步:修改startup.cs

     在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):

      services.AddSession();

     接下来我们要告诉Asp.net Core使用内存存储Session数据,在Configure(IApplicationBuilder app,...)方法中添加代码:

      app.UseSession();

    第三步 session的使用

    1、在MVC Controller里使用HttpContext.Session

    using Microsoft.AspNetCore.Http;

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

    public IActionResult About()
    {
    ViewBag.Code=HttpContext.Session.GetString("code");
    return View();
    }
    }

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

    public class SessionAppService

    {

    private IHttpContextAccessor _httpContextAccessor;
    private ISession Session => _httpContextAccessor.HttpContext.Session;
    public SessionAppService(IHttpContextAccessor httpContextAccessor)
    {
    _httpContextAccessor = httpContextAccessor;
    }

      public void Set()
         {
              _session.SetString("code","123456");
         }
        
         public void Get()
        {
             string code = _session.GetString("code");
         }
    

    }

    3、Isession的扩展 存储复杂对象

    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);
        }
    }
    使用范例
    var myComplexObject = new MyClass();
    HttpContext.Session.SetObjectAsJson("Test", myComplexObject);
    
    
    var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("Test");
  • 相关阅读:
    笔记:Linux进程间通信机制
    Linux下C/C++和lua交互-Table
    @JsonFormat时间格式化注解使用
    关于 mybatis 报invalid comparison: java.util.Arrays$ArrayList and java.lang.String异常
    @RestControllerAdvice作用及原理
    MySQL 中 datetime 和 timestamp 的区别与选择
    idea提交svn忽略.class等文件的相关配置(so easy)
    PLSQL Developer建表时注释(COMMENT)中文乱码的解决方案(Windows)
    oracle客户端安装与配置
    PLSQL安装、PLSQL汉化、激活
  • 原文地址:https://www.cnblogs.com/cb521413/p/9039688.html
Copyright © 2020-2023  润新知