iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core在WebApi项目中使用Cookie
  • 201
分享到

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

2024-04-02 19:04:59 201人浏览 薄情痞子
摘要

目录一、Cookie的作用二、在ASP.net core中使用Cookie1、在控制器中直接使用Cookie1.1、设置Cookie1.2、获取Cookie1.3、删除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
    {
        /// <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信息了。

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"];
        }
    }
}

运行程序,查看效果:

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的效果:

接下来我们访问删除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,所以需要创建一个单独的类库:

接下来创建一个接口,里面封装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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NET Core在WebApi项目中使用Cookie

本文链接: https://www.lsjlt.com/news/144028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core在WebApi项目中使用Cookie
    目录一、Cookie的作用二、在ASP.NET Core中使用Cookie1、在控制器中直接使用Cookie1.1、设置Cookie1.2、获取Cookie1.3、删除Cookie信...
    99+
    2024-04-02
  • ASP.NET Core在WebApi项目中怎么使用Cookie
    这篇文章主要讲解了“ASP.NET Core在WebApi项目中怎么使用Cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core在WebApi项...
    99+
    2023-06-29
  • Lamar怎么在ASP.Net Core项目中使用
    这篇文章将为大家详细讲解有关Lamar怎么在ASP.Net Core项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要用 Lamar 实现依赖注入要说 .NET 世界最早的依赖...
    99+
    2023-06-13
  • Asp.net core中怎么使用cookie验证身份
    今天就跟大家聊聊有关Asp.net core中怎么使用cookie验证身份,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ASP.NET Core Identity 是一个完整的全功能...
    99+
    2023-06-17
  • ASP.NETCore在WebApi项目中使用MiniProfiler分析EntityFrameworkCore
    安装配置MiniProfiler 在现有的ASP.NET Core MVC WebApi 项目里,通过Nuget安装MiniProfiler: Install-Package Min...
    99+
    2024-04-02
  • ASP.NET Core项目中调用WebService的方法
    一、前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码...
    99+
    2024-04-02
  • 如何在servlet项目中使用cookie
    如何在servlet项目中使用cookie?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Cookie技术是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览...
    99+
    2023-05-31
    servlet cookie
  • 如何在C#项目中调用WebApi
    如何在C#项目中调用WebApi?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.WebRequest方式Post:private void butto...
    99+
    2023-06-14
  • 分析Cookie SameSite属性及其在ASP.NET项目中的应用
    本篇内容主要讲解“分析Cookie SameSite属性及其在ASP.NET项目中的应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Cookie Same...
    99+
    2024-04-02
  • ASP.NET Core项目使用xUnit进行单元测试
    目录一、前言二、创建示例项目1、UnitTest.Model2、UnitTest.Data3、UnitTest.IRepository4、UnitTest.Repository5、U...
    99+
    2024-04-02
  • 如何在ASP.NET Core中使用HttpClientFactory
    目录为什么要使用 HttpClientFactory 使用 HttpClientFactory 注入 Controller ASP.Net Core 是一个开源的,跨平台的,轻量级模...
    99+
    2024-04-02
  • 如何在Asp.Net项目中使用ABP Dapper
    如何在Asp.Net项目中使用ABP Dapper?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 安装包依赖  这个不做过多的解释,通过Nuget 包管理器或者通过程序包...
    99+
    2023-06-08
  • Serilog如何在ASP.Net Core中使用
    本篇文章为大家展示了Serilog如何在ASP.Net Core中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。安装 Serilog使用 Visual Studio 新建 ASP.Net Cor...
    99+
    2023-06-14
  • 怎样在ASP.NET Core中使用HttpClientFactory
    本篇内容主要讲解“怎样在ASP.NET Core中使用HttpClientFactory”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎样在ASP.NET Core中使用HttpClientFa...
    99+
    2023-06-14
  • 如何在ASP.NET Core中使用ViewComponent
    目录前言自定义一个组件ViewComponent特性Taghelper方式Reference前言 在之前的开发过程中,我们对于应用或者说使用一些小的组件,通常使用分布页(parti...
    99+
    2024-04-02
  • ASP.NET Core中Cookie验证身份用法详解
    目录添加配置ASP.NET Core 1.xASP.NET Core 2.x创建身份认证CookieASP.NET Core 1.xASP.NET Core 2.xSigning o...
    99+
    2024-04-02
  • 如何在ASP.Net Core中使用Serilog
    目录安装 Serilog使用 Serilog Sink使用 Serilog 替换原生的 Logger记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志...
    99+
    2024-04-02
  • 如何在Asp.Net Core中使用Refit
    本篇文章给大家分享的是有关如何在Asp.Net Core中使用Refit,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ASP.NET 是什么ASP.NET 是开源,跨平台,高性...
    99+
    2023-06-07
  • ASP.NET Core项目如何使用xUnit进行单元测试
    小编给大家分享一下ASP.NET Core项目如何使用xUnit进行单元测试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言在以前的.NET Fr...
    99+
    2023-06-29
  • 在ASP.Net Core应用程序中使用Bootstrap4
    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了。 ASp.Net Core 中,通常在&n...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作