您现在的位置是:网站首页> 编程资料编程资料
ASP.NET Core在WebApi项目中使用Cookie_实用技巧_
2023-05-24
360人已围观
简介 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。

1、在控制器中直接使用Cookie
在项目中添加一个控制器,用来测试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 { /// /// 设置Cookie /// [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时指定如下的附加属性:
- 域:用于指定与Cookie关联的域。
- 过期时间:用于指定Cookie的过期时间。
- 路径:用于指定Cookie路径。
- 安全策略:用于指定Cookie是否可以通过HTTPS访问。
- HttpOnly:用于指定Cookie是否仅对服务器可用。
运行程序,我们首先访问WeatherForecast控制器,并且查看Cookie信息:

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

我们看到,这里已经有我们刚才添加的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 { /// /// 设置Cookie /// [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); } /// /// 根据key获取Cookie的Value值 /// /// [HttpGet] [Route("GetCookie")] public string GetCookid() { return HttpContext.Request.Cookies["setCookie"]; } } }运行程序,查看效果:

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 { /// /// 设置Cookie /// [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); } /// /// 根据key获取Cookie的Value值 /// /// [HttpGet] [Route("GetCookie")] public string GetCookid() { return HttpContext.Request.Cookies["setCookie"]; } /// /// 根据key删除Cookie /// [HttpGet] [Route("DeleteCookie")] public void DeleteCookie() { HttpContext.Response.Cookies.Delete("setCookie"); } } }运行程序,我们看查看获取Cookie的效果:

接下来我们访问删除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(); services.AddControllers(); } 因为我们是在类库中使用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; /// /// 通过构造函数进行注入 /// /// public CookieHelper(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// 根据key值删除对应的Cookie /// /// key值 public void DeleteCookie(string key) { _httpContextAccessor.HttpContext.Response.Cookies.Delete(key); } /// /// 根据key值获取Cookie的value值 /// /// key值 /// public string GetCookie(string key) { return _httpContextAccessor.HttpContext.Request.Cookies[key]; } /// /// 设置Cookie值 /// /// key值 /// value值 public void SetCookie(string key, string value) { _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value); } /// /// 设置Cookie及过期时间 /// /// key值 /// value值 /// 过期时间,以分钟为单位 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(); // 注册Cookie操作接口 services.AddSingleton(); 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; } /// /// 设置Cookie /// [HttpGet] [Route("SetCookie")] public void Get() { _helper.SetCookie("cookieHelperKey", "cookieHelperValue"); // 设置过期时间 _helper.SetCookie("cookieHelperExpiresKey", "cookieHelperExpitesValue",10); } /// /// 根据key获取Cookie的Value值 /// /// [HttpGet] [Route("GetCookie")] public string GetCookid() { return _helper.GetCookie("cookieHelperKey"); } /// /// 根据key删除Cookie /// [HttpGet] [Route("DeleteCookie")] public void DeleteCookie() { _helper.DeleteCookie("cookieHelperKey"); } } }运行程序,首先访问设置Cookie的方法:

可以看到,已经我们设置的Cookie信息了。
接下来访问获取Cookie:

可以根据key获取到对应的value值。
最后访问删除Cookie:
提示:
本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- ASP.NET Core全局异常处理_实用技巧_
- .NET Core中的HttpClientFactory类用法详解_实用技巧_
- .NET Core通过dotnet publish命令发布应用_实用技巧_
- .NET中的字符串驻留池介绍_基础应用_
- ASP.NET Core使用HttpClient调用WebService_实用技巧_
- ASP.NET Core项目使用xUnit进行单元测试_实用技巧_
- 基于ASP.NET实现验证码生成详解_实用技巧_
- ASP.NET Core使用AutoMapper实现实体映射_实用技巧_
- Entity Framework Core更新时间映射_实用技巧_
- Entity Framework Core表名映射_实用技巧_
