|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
namespace HttpClientStudy.WebApp.Controllers
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 普通(简单) 控制器
|
|
|
/// </summary>
|
|
|
[Route("api/[controller]/[action]")]
|
|
|
[ApiController]
|
|
|
public class CookieController : ControllerBase
|
|
|
{
|
|
|
private ILogger<CookieController> _logger;
|
|
|
private AccountService _accountService;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 构造
|
|
|
/// </summary>
|
|
|
public CookieController(ILogger<CookieController> logger, AccountService accountService)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
_accountService = accountService;
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取请求中的Cookie
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[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);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设置响应中的Cookie
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[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<string, string>[]
|
|
|
{
|
|
|
new KeyValuePair<string, string>("ProjectName","WebApp"),
|
|
|
new KeyValuePair<string, string>("Version","Dotnet9"),
|
|
|
};
|
|
|
|
|
|
|
|
|
HttpContext.Response.Cookies.Append(cookieData, cookieOptions);
|
|
|
|
|
|
|
|
|
var result = BaseResultUtil.Success("响应头中已设置Cookie");
|
|
|
|
|
|
return Ok(result);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设置Cookie
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[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);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 检测Cookie
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[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<string, string> 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"));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|