文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NET Core在WebApi项目中怎么使用Cookie

2023-06-29 16:50

关注

这篇文章主要讲解了“ASP.NET Core在WebApi项目中怎么使用Cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core在WebApi项目中怎么使用Cookie”吧!

一、Cookie的作用

Cookie通常用来存储有关用户信息的一条数据,可以用来标识登录用户,Cookie存储在客户端的浏览器上。在大多数浏览器中,每个Cookie都存储为一个小文件。Cookie表示为键/值对的形式,可以利用键来读取、写入或删除Cookie。

在ASP.NET Core中也可以使用Cookie来维护回话状态,包含回话ID的Cookie会随着每个请求一起发送到客户端。

二、在ASP.NET Core中使用Cookie

我们创建一个ASP.NET Core WebApi的项目,然后在WebApi中测试使用Cookie。

ASP.NET Core在WebApi项目中怎么使用Cookie

1、在控制器中直接使用Cookie

在项目中添加一个控制器,用来测试Cookie:

ASP.NET Core在WebApi项目中怎么使用Cookie

1.1、设置Cookie

我们在控制器里面可以使用下面的代码设置Cookie:

HttpContext.Response.Cookies.Append("setCookie", "CookieValue");

如果想设置Cookie的过期时间,我们可以使用Append的重载方法:

CookieOptions options = new CookieOptions();// 设置过期时间options.Expires = DateTime.Now.AddDays(1);HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);

控制器里面的方法代码如下:

using System;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CookieDemo.Controllers{    [Route("api/")]    [ApiController]    public class CookieTestController : ControllerBase    {        /// <summary>        /// 设置Cookie        /// </summary>        [HttpGet]        [Route("SetCookie")]        public void Get()        {            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");                     CookieOptions options = new CookieOptions();            // 设置过期时间            options.Expires = DateTime.Now.AddDays(1);            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);        }    }}

CookieOptions类可以在创建Cookie时指定如下的附加属性:

运行程序,我们首先访问WeatherForecast控制器,并且查看Cookie信息:

ASP.NET Core在WebApi项目中怎么使用Cookie

我们看到,这里只有一个Cookie信息,接下来方法SetCookie方法:

ASP.NET Core在WebApi项目中怎么使用Cookie

我们看到,这里已经有我们刚才添加的Cookie信息了。

1.2、获取Cookie

我们可以根据key来获取Cookie信息:

HttpContext.Request.Cookies["key"];

我们来看具体代码:

using System;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CookieDemo.Controllers{    [Route("api/")]    [ApiController]    public class CookieTestController : ControllerBase    {        /// <summary>        /// 设置Cookie        /// </summary>        [HttpGet]        [Route("SetCookie")]        public void Get()        {            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");                     CookieOptions options = new CookieOptions();            // 设置过期时间            options.Expires = DateTime.Now.AddDays(1);            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);        }        /// <summary>        /// 根据key获取Cookie的Value值        /// </summary>        /// <returns></returns>        [HttpGet]        [Route("GetCookie")]        public string GetCookid()        {                       return HttpContext.Request.Cookies["setCookie"];        }    }}

运行程序,查看效果:

ASP.NET Core在WebApi项目中怎么使用Cookie

1.3、删除Cookie信息

我们可以根据key删除Cookie信息,如下代码:

HttpContext.Response.Cookies.Delete("key");

接下来看具体代码:

using System;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CookieDemo.Controllers{    [Route("api/")]    [ApiController]    public class CookieTestController : ControllerBase    {        /// <summary>        /// 设置Cookie        /// </summary>        [HttpGet]        [Route("SetCookie")]        public void Get()        {            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");                     CookieOptions options = new CookieOptions();            // 设置过期时间            options.Expires = DateTime.Now.AddDays(1);            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);        }        /// <summary>        /// 根据key获取Cookie的Value值        /// </summary>        /// <returns></returns>        [HttpGet]        [Route("GetCookie")]        public string GetCookid()        {                       return HttpContext.Request.Cookies["setCookie"];        }        /// <summary>        /// 根据key删除Cookie        /// </summary>        [HttpGet]        [Route("DeleteCookie")]        public void DeleteCookie()        {            HttpContext.Response.Cookies.Delete("setCookie");        }    }}

运行程序,我们看查看获取Cookie的效果:

ASP.NET Core在WebApi项目中怎么使用Cookie

接下来我们访问删除Cookie的方法:

ASP.NET Core在WebApi项目中怎么使用Cookie可以看到,刚才的Cookie信息已经删除掉了。

2、封装Cookie

在上面的例子中,我们是访问的HttpContext对象的Response和Request,然后才能设置、获取或删除Cookie信息。在具体的程序中,我们一般是把Cookie的操作进行封装,我们可以使用IHttpContextAccessor接口访问ASP.NET Core中的HttpContext.HttpContextAccessor类实现此接口。下面我们看一下如何在类库中操作Cookie。

首先,我们需要注册IHttpContextAccessor以进行依赖项注入,在Startup类的ConfigureServices方法中添加类型为HttpContextAccessor的单例服务:

public void ConfigureServices(IServiceCollection services){    // 注册为单例    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();    services.AddControllers();}

因为我们是在类库中使用Cookie,所以需要创建一个单独的类库:

ASP.NET Core在WebApi项目中怎么使用Cookie

接下来创建一个接口,里面封装Cookie的一些操作:

namespace CookieDemo.Framework{    public interface ICookieHelper    {        void SetCookie(string key, string value);        void SetCookie(string key, string value, int expiresTime);        string GetCookie(string key);        void DeleteCookie(string key);    }}

然后定义一个具体的实现类实现ICookieHelper接口:

using Microsoft.AspNetCore.Http;using System;namespace CookieDemo.Framework{    public class CookieHelper : ICookieHelper    {        private readonly IHttpContextAccessor _httpContextAccessor;        /// <summary>        /// 通过构造函数进行注入        /// </summary>        /// <param name="httpContextAccessor"></param>        public CookieHelper(IHttpContextAccessor httpContextAccessor)        {            _httpContextAccessor = httpContextAccessor;        }        /// <summary>        /// 根据key值删除对应的Cookie        /// </summary>        /// <param name="key">key值</param>        public void DeleteCookie(string key)        {            _httpContextAccessor.HttpContext.Response.Cookies.Delete(key);        }        /// <summary>        /// 根据key值获取Cookie的value值        /// </summary>        /// <param name="key">key值</param>        /// <returns></returns>        public string GetCookie(string key)        {           return _httpContextAccessor.HttpContext.Request.Cookies[key];        }        /// <summary>        /// 设置Cookie值        /// </summary>        /// <param name="key">key值</param>        /// <param name="value">value值</param>        public void SetCookie(string key, string value)        {            _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value);        }        /// <summary>        /// 设置Cookie及过期时间        /// </summary>        /// <param name="key">key值</param>        /// <param name="value">value值</param>        /// <param name="expiresTime">过期时间,以分钟为单位</param>        public void SetCookie(string key, string value, int expiresTime)        {            CookieOptions options = new CookieOptions()            {                Expires = DateTime.Now.AddMinutes(expiresTime)            };            _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value,options);        }    }}

最后我们还需要在Startup的ConfigureServices方法里面注入:

public void ConfigureServices(IServiceCollection services){    // 注册为单例    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();    // 注册Cookie操作接口    services.AddSingleton<ICookieHelper, CookieHelper>();    services.AddControllers();}

在添加一个控制器访问Cookie:

using CookieDemo.Framework;using Microsoft.AspNetCore.Mvc;namespace CookieDemo.Controllers{    [Route("api/CookieHelperTest")]    [ApiController]    public class CookieHelperTestController : ControllerBase    {        private readonly ICookieHelper _helper;        public CookieHelperTestController(ICookieHelper helper)        {            _helper = helper;        }        /// <summary>        /// 设置Cookie        /// </summary>        [HttpGet]        [Route("SetCookie")]        public void Get()        {            _helper.SetCookie("cookieHelperKey", "cookieHelperValue");            // 设置过期时间            _helper.SetCookie("cookieHelperExpiresKey", "cookieHelperExpitesValue",10);        }        /// <summary>        /// 根据key获取Cookie的Value值        /// </summary>        /// <returns></returns>        [HttpGet]        [Route("GetCookie")]        public string GetCookid()        {            return _helper.GetCookie("cookieHelperKey");        }        /// <summary>        /// 根据key删除Cookie        /// </summary>        [HttpGet]        [Route("DeleteCookie")]        public void DeleteCookie()        {            _helper.DeleteCookie("cookieHelperKey");        }    }}

运行程序,首先访问设置Cookie的方法:

ASP.NET Core在WebApi项目中怎么使用Cookie

可以看到,已经我们设置的Cookie信息了。

接下来访问获取Cookie:

ASP.NET Core在WebApi项目中怎么使用Cookie

可以根据key获取到对应的value值。

最后访问删除Cookie:

ASP.NET Core在WebApi项目中怎么使用Cookie

可以看到,key对应的cookie已经被删除了。

感谢各位的阅读,以上就是“ASP.NET Core在WebApi项目中怎么使用Cookie”的内容了,经过本文的学习后,相信大家对ASP.NET Core在WebApi项目中怎么使用Cookie这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯