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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM