.NET Core Session的使用方法 - zock - 博客园

.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();

刚使用.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");