<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Cookie通常用來儲存有關使用者資訊的一條資料,可以用來標識登入使用者,Cookie儲存在使用者端的瀏覽器上。在大多數瀏覽器中,每個Cookie都儲存為一個小檔案。Cookie表示為鍵/值對的形式,可以利用鍵來讀取、寫入或刪除Cookie。
在ASP.NET Core中也可以使用Cookie來維護回話狀態,包含回話ID的Cookie會隨著每個請求一起傳送到使用者端。
我們建立一個ASP.NET Core WebApi的專案,然後在WebApi中測試使用Cookie。
在專案中新增一個控制器,用來測試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資訊:
我們看到,這裡只有一個Cookie資訊,接下來方法SetCookie方法:
我們看到,這裡已經有我們剛才新增的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"]; } } }
執行程式,檢視效果:
我們可以根據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的效果:
接下來我們存取刪除Cookie的方法:
可以看到,剛才的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,所以需要建立一個單獨的類庫:
接下來建立一個介面,裡面封裝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的方法:
可以看到,已經我們設定的Cookie資訊了。
接下來存取獲取Cookie:
可以根據key獲取到對應的value值。
最後存取刪除Cookie:
可以看到,key對應的cookie已經被刪除了。
GitHub原始碼地址:https://github.com/jxl1024/Cookie
到此這篇關於ASP.NET Core在WebApi專案中使用Cookie的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45