温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-03-28 09:16:12 来源:亿速云 阅读:317 作者:iii 栏目:开发技术

这篇文章主要讲解了“ASP.NET Core在WebApi项目中怎么使用Cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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。

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

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

    在项目中添加一个控制器,用来测试Cookie:

    ASP.NET Core在WebApi项目中怎么使用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信息:

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

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

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

    我们看到,这里已经有我们刚才添加的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"];
            }
        }
    }

    运行程序,查看效果:

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

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

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

    接下来我们访问删除Cookie的方法:

    ASP.NET Core在WebApi项目中怎么使用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,所以需要创建一个单独的类库:

    ASP.NET Core在WebApi项目中怎么使用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的方法:

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

    可以看到,已经我们设置的Cookie信息了。

    接下来访问获取Cookie:

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

    可以根据key获取到对应的value值。

    最后访问删除Cookie:

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

    可以看到,key对应的cookie已经被删除了。

    感谢各位的阅读,以上就是“ASP.NET Core在WebApi项目中怎么使用Cookie”的内容了,经过本文的学习后,相信大家对ASP.NET Core在WebApi项目中怎么使用Cookie这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI