.NET Core Session的使用方法

Posted siyunianhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Core Session的使用方法相关的知识,希望对你有一定的参考价值。

刚使用.NET Core会不习惯,比如如何使用Session;不仅需要引用相应的类库,还需要在Startup.cs里进行注册。

1、在你的项目上基于NuGet添加:

install-package  Microsoft.AspNetCore.Session -ver 2.0

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

 

2、在Startup.cs里进行注册

在Startup.cs文件中的ConfigureServices方法中添加:

services.AddSession();

在Startup.cs文件中的Configure方法中添加:

app.UseSession(); 

添加后代码如下:

public void ConfigureServices(IServiceCollection services)

    services.AddSession();
    services.AddMvc();

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    
    else
    
        app.UseExceptionHandler("/Home/Error");
    

    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    
        routes.MapRoute(
        name: "default",
        template: "controller=Home/action=Index/id?");
    );

 3、在MVC Controller里使用HttpContext.Session

从nuget安装Microsoft.AspNetCore.Mvc引用,直接使用自带的方法进行设置和获取session。不过自带的方法设置和获取的session值是byte[]类型的,可以从nuget安装并引用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();
    
 4、如果不是在Controller里,你可以注入IHttpContextAccessor
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");
    

5、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 myTestObject = new MyTestClass();
HttpContext.Session.SetObjectAsJson("SessionTest", myTestObject);
var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("SessionTest");

以上是关于.NET Core Session的使用方法的主要内容,如果未能解决你的问题,请参考以下文章

[Asp.Net Core]Session的使用

[Asp.Net Core]Session的使用

.net core 2.2跨域session

ASP.NET Core 使用Redis 存储Session 实现共享 Session

在中间件中使用 .NET Core Session

Net Core 使用Redis保存进程外session