1. 程式人生 > >.NET Core Session的使用方法

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

如果你看到這段文字,說明您正使用RSS閱讀或轉自《一棵樹-部落格園》,原文地址:https://www.cnblogs.com/atree/p/netcore-session.html 

新增後代碼如下:

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");