using Microsoft.AspNetCore.Mvc; namespace HttpClientStudy.WebApp.Controllers { /// /// 普通(简单) 控制器 /// [Route("api/[controller]/[action]")] [ApiController] public class CookieController : ControllerBase { private ILogger _logger; private AccountService _accountService; /// /// 构造 /// public CookieController(ILogger logger, AccountService accountService) { _logger = logger; _accountService = accountService; } /// /// 获取请求中的Cookie /// /// [HttpGet] public IActionResult GetRequestCookie() { var cookies = Request.Cookies; if (cookies == null || cookies.Count == 0) { return Ok(BaseResultUtil.Success("", "没有Cookie")); } var result = BaseResultUtil.Success(cookies); return Ok(result); } /// /// 设置响应中的Cookie /// /// [HttpGet] public IActionResult GetResponseCookie() { //Cookie选项 var cookieOptions = new CookieOptions { // 设置过期时间(如1天后过期) Expires = DateTimeOffset.Now.AddDays(1), // 设置Cookie路径 Path = "/", // 设置HttpOnly(防止XSS攻击) HttpOnly = false, // 设置Secure(仅HTTPS传输) Secure = false, // 设置SameSite策略 SameSite = SameSiteMode.Unspecified }; var cookieData = new KeyValuePair[] { new KeyValuePair("ProjectName","WebApp"), new KeyValuePair("Version","Dotnet9"), }; HttpContext.Response.Cookies.Append(cookieData, cookieOptions); var result = BaseResultUtil.Success("响应头中已设置Cookie"); return Ok(result); } /// /// 设置Cookie /// /// [HttpGet] public IActionResult SetResponseCookie(string cookieName, string cookieValue) { Response.Headers.TryAdd("Cookie", $"{cookieName}={cookieValue ?? string.Empty}"); var result = BaseResultUtil.Success($"响应头{cookieName}中已设置Cookie值{cookieValue}"); return Ok(result); } /// /// 检测Cookie /// /// [HttpGet] public IActionResult CheckCookie(string? cookieName) { var cookies = Request.Cookies; if (cookies == null || cookies.Count == 0) { return Ok(BaseResultUtil.Success("", "没有Cookie")); } if (string.IsNullOrWhiteSpace(cookieName)) { var allCookie = BaseResultUtil.Success(cookies, "返回所有Cookie"); return Ok(allCookie); } KeyValuePair findCookie = cookies.FirstOrDefault(c => c.Key == cookieName); if (findCookie.Key == null) { return Ok(BaseResultUtil.Success($"请求头中没有找到名为{cookieName}的Cookie", $"没找到Cookie")); } else { return Ok(BaseResultUtil.Success($"请求头中名为{findCookie.Key}的Cookie,其值为{findCookie.Value}", $"找到Cookie")); } } } }