netcore中的Session以及HttpContext对象使用小结

l,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。

第二就是使用Session的问题,Core里使用Session需要添加Session类库。

添加Session

在你的项目上基于NuGet添加:Microsoft.AspNetCore.Session

修改startup.cs

在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):services.AddSession();

接下来我们要告诉Asp.net Core使用内存存储Session数据,在Configure(IApplicationBuilder app,...)中添加代码:app.UserSession(); 

Session

1、在MVC Controller里使用HttpContext.Session

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using 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();
     }
}

2、如果不是在Controller里,你可以注入IHttpContextAccessor,有两种方式,一种是在类的构造函数里面注入,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SomeOtherClass
{
    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" );
    }
}
另外一种是通过IServiceProvider,这时需要在startup中Configure中得到这个对象,然后通过
得到Microsoft.AspNetCore.Http.HttpContext对象,这时就可以和使用 HttpContext了,里面有Session,Request,Response对象的使用,在使用Request对象时,这样获取HttpContext.Request.Query[""]请求参数,获取cookie通过HttpContext.Request.Cookies[""],这里有一点需要注意netcore中的cookie添加的是通过HttpContext.Response.Cookies.Append方法添加的,和asp.net 不同的是添加的键值对的值是自动UrlEncode的,所以获取cookie的时候是UrlDecode的,这个需要注意。

你可能感兴趣的:(C#编程)