.Net Core下Cookie的使用
1.Cookie的使用
如果在Controller里面直接使用
HttpContext.Response.Cookies.Append("user", "小明");//写入
HttpContext.Request.Cookies.TryGetValue("user", out string user);//读取
HttpContext.Response.Cookies.Delete("user");//删除
如果不在Controller,如在类库中使用,自定义CookieHelper等类库对Cookie进行操作的话,那直接使用HttpContext.Response.Cookies等相关方法是操作不了的
需要使用IHttpContextAccessor来传入HttpContext才能使用,注意需引入using Microsoft.AspNetCore.Http
如自定义的类CookieHelper
这里就实现了AddCookie方法来示例一下
public class CookieHelper : ICookieHelper {
private readonly IHttpContextAccessor _HttpContextAccessor;
public CookieHelper(IHttpContextAccessor httpContextAccessor) {
_HttpContextAccessor = httpContextAccessor;
}
public void AddCookie(string key, string value) {
_HttpContextAccessor.HttpContext.Response.Cookies.Append(key, value, new CookieOptions() { IsEssential = true });//IsEssential = true 是否强制存储cookie
}
public bool ContainsKey(string key) {
throw new NotImplementedException();
}
public void Delete(string key) {
throw new NotImplementedException();
}
public string GetCookie(string key) {
throw new NotImplementedException();
}
public void TryDelete(string key) {
throw new NotImplementedException();
}
public void UpdateCookie(string key, string value) {
throw new NotImplementedException();
}
}
在Startup中的ConfigureServices方法中需进行配置,IOC的注册
//注册
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ICookieHelper, CookieHelper>();
这样就可以在CookieHelper中拿到IHttpContextAccessor,然后通过他拿到HttpContext对Cookie来操作
2.Cookie如果遇到写入不了的处理
默认MVC程序中的Startup中的ConfigureServices中会对Cookie进行配置如
services.Configure<CookiePolicyOptions>(options => {
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;GDPR规范关闭 如果不关闭可能会cookie写入不了 在本机调试的时候无此问题,发布的时候就会碰到
options.MinimumSameSitePolicy = SameSiteMode.None;
});
其中的options.CheckConsentNeeded = context => true;如果为true就是要按照GDPR规则来
《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟于2018年5月25日出台的条例,前身是欧盟在1995年制定的《计算机数据保护法》。
这样你只要将options.CheckConsentNeeded = context => false;修改下就行了
或者在Startup的Configure方法中
//app.UseCookiePolicy();//使用cookie策略 与上面services.Configure<CookiePolicyOptions>对应 所以cookie写入不了的话可以将上面的策略options.CheckConsentNeeded = context => true; 或此处注释掉不使用此中间件
将app.UseCookiePolicy();此代码注释掉
因为在ConfigureServices中对Cookie的策略进行配置,需要在Configure中app.UseCookiePolicy()使用才可以。所以两个地方你修改其中之一就行了,这样就可以写入了。
上一篇: 有沟,还挺深的
下一篇: 怎么减肥才有效 推荐三款消脂药膳偏方