.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()使用才可以。所以两个地方你修改其中之一就行了,这样就可以写入了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值