最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET?Core在WebApi項(xiàng)目中使用Cookie

 更新時(shí)間:2022年03月26日 16:08:42   作者:.NET開發(fā)菜鳥  
這篇文章介紹了ASP.NET?Core在WebApi項(xiàng)目中使用Cookie的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、Cookie的作用

Cookie通常用來存儲(chǔ)有關(guān)用戶信息的一條數(shù)據(jù),可以用來標(biāo)識(shí)登錄用戶,Cookie存儲(chǔ)在客戶端的瀏覽器上。在大多數(shù)瀏覽器中,每個(gè)Cookie都存儲(chǔ)為一個(gè)小文件。Cookie表示為鍵/值對(duì)的形式,可以利用鍵來讀取、寫入或刪除Cookie。

在ASP.NET Core中也可以使用Cookie來維護(hù)回話狀態(tài),包含回話ID的Cookie會(huì)隨著每個(gè)請(qǐng)求一起發(fā)送到客戶端。

二、在ASP.NET Core中使用Cookie

我們創(chuàng)建一個(gè)ASP.NET Core WebApi的項(xiàng)目,然后在WebApi中測(cè)試使用Cookie。

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

在項(xiàng)目中添加一個(gè)控制器,用來測(cè)試Cookie:

1.1、設(shè)置Cookie

我們?cè)诳刂破骼锩婵梢允褂孟旅娴拇a設(shè)置Cookie:

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

如果想設(shè)置Cookie的過期時(shí)間,我們可以使用Append的重載方法:

CookieOptions options = new CookieOptions();
// 設(shè)置過期時(shí)間
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>
        /// 設(shè)置Cookie
        /// </summary>
        [HttpGet]
        [Route("SetCookie")]
        public void Get()
        {
            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");
         
            CookieOptions options = new CookieOptions();
            // 設(shè)置過期時(shí)間
            options.Expires = DateTime.Now.AddDays(1);
            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);
        }
    }
}

CookieOptions類可以在創(chuàng)建Cookie時(shí)指定如下的附加屬性:

  • 域:用于指定與Cookie關(guān)聯(lián)的域。
  • 過期時(shí)間:用于指定Cookie的過期時(shí)間。
  • 路徑:用于指定Cookie路徑。
  • 安全策略:用于指定Cookie是否可以通過HTTPS訪問。
  • HttpOnly:用于指定Cookie是否僅對(duì)服務(wù)器可用。

運(yùn)行程序,我們首先訪問WeatherForecast控制器,并且查看Cookie信息:

我們看到,這里只有一個(gè)Cookie信息,接下來方法SetCookie方法:

我們看到,這里已經(jīng)有我們剛才添加的Cookie信息了。

1.2、獲取Cookie

我們可以根據(jù)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>
        /// 設(shè)置Cookie
        /// </summary>
        [HttpGet]
        [Route("SetCookie")]
        public void Get()
        {
            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");
         
            CookieOptions options = new CookieOptions();
            // 設(shè)置過期時(shí)間
            options.Expires = DateTime.Now.AddDays(1);
            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);
        }

        /// <summary>
        /// 根據(jù)key獲取Cookie的Value值
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("GetCookie")]
        public string GetCookid()
        {           
            return HttpContext.Request.Cookies["setCookie"];
        }
    }
}

運(yùn)行程序,查看效果:

1.3、刪除Cookie信息

我們可以根據(jù)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>
        /// 設(shè)置Cookie
        /// </summary>
        [HttpGet]
        [Route("SetCookie")]
        public void Get()
        {
            HttpContext.Response.Cookies.Append("setCookie", "CookieValue");
         
            CookieOptions options = new CookieOptions();
            // 設(shè)置過期時(shí)間
            options.Expires = DateTime.Now.AddDays(1);
            HttpContext.Response.Cookies.Append("setCookieExpires", "CookieValueExpires", options);
        }

        /// <summary>
        /// 根據(jù)key獲取Cookie的Value值
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("GetCookie")]
        public string GetCookid()
        {           
            return HttpContext.Request.Cookies["setCookie"];
        }

        /// <summary>
        /// 根據(jù)key刪除Cookie
        /// </summary>
        [HttpGet]
        [Route("DeleteCookie")]
        public void DeleteCookie()
        {
            HttpContext.Response.Cookies.Delete("setCookie");
        }
    }
}

運(yùn)行程序,我們看查看獲取Cookie的效果:

接下來我們?cè)L問刪除Cookie的方法:

可以看到,剛才的Cookie信息已經(jīng)刪除掉了。

2、封裝Cookie

在上面的例子中,我們是訪問的HttpContext對(duì)象的Response和Request,然后才能設(shè)置、獲取或刪除Cookie信息。在具體的程序中,我們一般是把Cookie的操作進(jìn)行封裝,我們可以使用IHttpContextAccessor接口訪問ASP.NET Core中的HttpContext.HttpContextAccessor類實(shí)現(xiàn)此接口。下面我們看一下如何在類庫中操作Cookie。

首先,我們需要注冊(cè)IHttpContextAccessor以進(jìn)行依賴項(xiàng)注入,在Startup類的ConfigureServices方法中添加類型為HttpContextAccessor的單例服務(wù):

public void ConfigureServices(IServiceCollection services)
{
    // 注冊(cè)為單例
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    services.AddControllers();
}

因?yàn)槲覀兪窃陬悗熘惺褂肅ookie,所以需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的類庫:

接下來創(chuàng)建一個(gè)接口,里面封裝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);
    }
}

然后定義一個(gè)具體的實(shí)現(xiàn)類實(shí)現(xiàn)ICookieHelper接口:

using Microsoft.AspNetCore.Http;
using System;

namespace CookieDemo.Framework
{
    public class CookieHelper : ICookieHelper
    {
        private readonly IHttpContextAccessor _httpContextAccessor;

        /// <summary>
        /// 通過構(gòu)造函數(shù)進(jìn)行注入
        /// </summary>
        /// <param name="httpContextAccessor"></param>
        public CookieHelper(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        /// <summary>
        /// 根據(jù)key值刪除對(duì)應(yīng)的Cookie
        /// </summary>
        /// <param name="key">key值</param>
        public void DeleteCookie(string key)
        {
            _httpContextAccessor.HttpContext.Response.Cookies.Delete(key);
        }

        /// <summary>
        /// 根據(jù)key值獲取Cookie的value值
        /// </summary>
        /// <param name="key">key值</param>
        /// <returns></returns>
        public string GetCookie(string key)
        {
           return _httpContextAccessor.HttpContext.Request.Cookies[key];
        }

        /// <summary>
        /// 設(shè)置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>
        /// 設(shè)置Cookie及過期時(shí)間
        /// </summary>
        /// <param name="key">key值</param>
        /// <param name="value">value值</param>
        /// <param name="expiresTime">過期時(shí)間,以分鐘為單位</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)
{
    // 注冊(cè)為單例
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    // 注冊(cè)Cookie操作接口
    services.AddSingleton<ICookieHelper, CookieHelper>();
    services.AddControllers();
}

在添加一個(gè)控制器訪問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>
        /// 設(shè)置Cookie
        /// </summary>
        [HttpGet]
        [Route("SetCookie")]
        public void Get()
        {
            _helper.SetCookie("cookieHelperKey", "cookieHelperValue");
            // 設(shè)置過期時(shí)間
            _helper.SetCookie("cookieHelperExpiresKey", "cookieHelperExpitesValue",10);
        }

        /// <summary>
        /// 根據(jù)key獲取Cookie的Value值
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("GetCookie")]
        public string GetCookid()
        {
            return _helper.GetCookie("cookieHelperKey");
        }

        /// <summary>
        /// 根據(jù)key刪除Cookie
        /// </summary>
        [HttpGet]
        [Route("DeleteCookie")]
        public void DeleteCookie()
        {
            _helper.DeleteCookie("cookieHelperKey");
        }
    }
}

運(yùn)行程序,首先訪問設(shè)置Cookie的方法:

可以看到,已經(jīng)我們?cè)O(shè)置的Cookie信息了。

接下來訪問獲取Cookie:

可以根據(jù)key獲取到對(duì)應(yīng)的value值。

最后訪問刪除Cookie:

可以看到,key對(duì)應(yīng)的cookie已經(jīng)被刪除了。

GitHub源碼地址:https://github.com/jxl1024/Cookie

到此這篇關(guān)于ASP.NET Core在WebApi項(xiàng)目中使用Cookie的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 概述.net開發(fā)過程中Bin目錄下面幾種文件格式

    概述.net開發(fā)過程中Bin目錄下面幾種文件格式

    本篇文章主要對(duì)項(xiàng)目發(fā)布的時(shí)候,經(jīng)常用到的幾個(gè)文件:.pdb、.xsd、.vshost.exe、.exe、.exe.config、.vshost.exe.config的作用進(jìn)行介紹,具有一定的參考價(jià)值,需要的朋友可以看下
    2016-12-12
  • Visual Studio 2019 使用 Live Share的教程圖解

    Visual Studio 2019 使用 Live Share的教程圖解

    Visual Studio 2019 在今天發(fā)布(北京時(shí)間)了,這次帶來了一個(gè)比較有趣的 Live Share 功能,使用它可以進(jìn)行更好的協(xié)作開發(fā)。這篇文章主要介紹了Visual Studio 2019 使用 Live Share的教程,需要的朋友可以參考下
    2019-04-04
  • asp.net viewstate 回發(fā)機(jī)制

    asp.net viewstate 回發(fā)機(jī)制

    ASP.NET中,為了模擬Winform中的事件響應(yīng)機(jī)制,微軟的工程師真是煞費(fèi)苦心,發(fā)明了“回發(fā)”機(jī)制,使得編寫WEB頁面變得和Winform一樣簡單。
    2010-03-03
  • .NET 單點(diǎn)登錄解決方案

    .NET 單點(diǎn)登錄解決方案

    這里指的單點(diǎn),泛指在WEB服務(wù)端,一個(gè)賬戶同一時(shí)刻只能存在一個(gè)票據(jù)!怎么使同一個(gè)用戶,在同一時(shí)間內(nèi)只允許登錄一次,下面將為大家詳細(xì)介紹下
    2013-10-10
  • asp.net 取消緩存相關(guān)問題說明

    asp.net 取消緩存相關(guān)問題說明

    asp.net 取消緩存相關(guān)問題說明,需要的朋友可以參考下。
    2009-11-11
  • ASP.NET 4.0配置文件中的ClientIDMode屬性詳解

    ASP.NET 4.0配置文件中的ClientIDMode屬性詳解

    在ASP.NET 4.0中的每個(gè)控件上都多了一個(gè)叫做ClientIDMode的屬性,本文主要介紹了ASP.NET 4.0配置文件中的ClientIDMode屬性詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-11-11
  • asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐

    asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐

    這篇文章主要介紹了asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 你應(yīng)該知道的.NET錯(cuò)誤與異常處理機(jī)制

    你應(yīng)該知道的.NET錯(cuò)誤與異常處理機(jī)制

    這篇文章主要給大家介紹了關(guān)于.NET錯(cuò)誤與異常處理機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.NET具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • asp.net下中文驗(yàn)證碼,免費(fèi)開源代碼

    asp.net下中文驗(yàn)證碼,免費(fèi)開源代碼

    asp.net下中文驗(yàn)證碼,免費(fèi)開源代碼...
    2007-04-04
  • ASP.NET多彩下拉框開發(fā)實(shí)例

    ASP.NET多彩下拉框開發(fā)實(shí)例

    有人曾經(jīng)提出開發(fā)一個(gè)根據(jù)不同選擇而顯示不同顏色的管理工具,本文主要就是演示如何讀取系統(tǒng)顏色并在下拉框中的每個(gè)條目中顯示對(duì)應(yīng)的顏色,需要的朋友可以參考下
    2015-09-09

最新評(píng)論

都安| 额尔古纳市| 桐梓县| 柳州市| 屏边| 来凤县| 普定县| 宝坻区| 涡阳县| 潼关县| 蕲春县| 赣州市| 仁化县| 德安县| 湛江市| 安阳县| 中方县| 天祝| 阿克苏市| 澎湖县| 长岭县| 靖州| 芒康县| 商城县| 年辖:市辖区| 武胜县| 响水县| 炎陵县| 鄂伦春自治旗| 班戈县| 陵川县| 化州市| 浏阳市| 商南县| 顺平县| 靖州| 剑河县| 荆门市| 南郑县| 咸丰县| 米易县|