您好,登錄后才能下訂單哦!
這篇文章主要講解了“ASP.NET Core在WebApi項目中怎么使用Cookie”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET Core在WebApi項目中怎么使用Cookie”吧!
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時指定如下的附加屬性:
域:用于指定與Cookie關聯的域。
過期時間:用于指定Cookie的過期時間。
路徑:用于指定Cookie路徑。
安全策略:用于指定Cookie是否可以通過HTTPS訪問。
HttpOnly:用于指定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已經被刪除了。
感謝各位的閱讀,以上就是“ASP.NET Core在WebApi項目中怎么使用Cookie”的內容了,經過本文的學習后,相信大家對ASP.NET Core在WebApi項目中怎么使用Cookie這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。