ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.NET Core Session的使用方法

2019-09-09 18:56:57  阅读:227  来源: 互联网

标签:Core code Session app HttpContext session NET public


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

标签:Core,code,Session,app,HttpContext,session,NET,public
来源: https://www.cnblogs.com/siyunianhua/p/11493485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有