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