如何读取响应 cookie
How to read response cookies
ASP.NET 5 MVC 应用程序方法设置 HttpContext.Response cookie。
如何在同一请求中通过长调用链从控制器调用的其他方法中读取此 cookie 值?
响应收集接口中不存在该方法
public interface IResponseCookies
{
void Append(string key, string value);
void Append(string key, string value, CookieOptions options);
void Delete(string key);
void Delete(string key, CookieOptions options);
}
当前请求的TempData值设置在其他方法中可以读取。为什么 cookie 不能? HttpContext.Items 中的 cookie 设置应该重复还是有更好的方法?
背景:
购物车应用程序具有从控制器调用的日志方法。
它必须记录 cartid
如果用户第一次将产品添加到购物车,控制器会使用新的 guid 创建购物车 ID,并将 cartid cookie 添加到响应中。
logger 方法使用 Request.Cookies["cartid"]
来记录购物车。
对于添加到购物车的第一件商品,它 return 为空,因为浏览器未设置 cookie。
Response.Cookies["cartid"]
不存在。
Log 方法可以从很多地方调用。很难将 cartid 作为参数传递给它。
应用程序具有从控制器调用的日志方法。它将控制器上下文记录到控制器使用的同一数据库中。
在使用 ASP.NET 核心应用程序模板创建的错误控制器中执行日志记录:
public async Task<IActionResult> Error()
{
var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
await logger.LogExceptionPage(exceptionHandlerPathFeature);
HttpContext.Response.StatusCode = 500;
return new ContentResult() {
Content ="error"
};
}
如何通过错误前执行的代码在此方法中记录响应 cookie?
导致编译错误的代码:
public class CartController : ControllerBase
{
const string cartid = "cartid";
private readonly HttpContextAccessor ca;
public CartController(HttpContextAccessor ca)
{
this.ca = ca;
}
public IActionResult AddToCartTest(int quantity, string product)
{
ca.HttpContext.Response.Cookies.Append(cartid, Guid.NewGuid().ToString());
Log("AddToCartStarted");
return View();
}
void Log(string activity)
{
Console.WriteLine($"{activity} in cart {ca.HttpContext.Response.Cookies[cartid]}");
}
}
您无法从 Response 中读取 Cookie。您需要按照以下方式从请求中读取它
ca.HttpContext.Request.Cookies[cartId];
cartId 是存储在 Cookie 中的值的键。
ASP.NET 5 MVC 应用程序方法设置 HttpContext.Response cookie。 如何在同一请求中通过长调用链从控制器调用的其他方法中读取此 cookie 值?
响应收集接口中不存在该方法
public interface IResponseCookies
{
void Append(string key, string value);
void Append(string key, string value, CookieOptions options);
void Delete(string key);
void Delete(string key, CookieOptions options);
}
当前请求的TempData值设置在其他方法中可以读取。为什么 cookie 不能? HttpContext.Items 中的 cookie 设置应该重复还是有更好的方法?
背景:
购物车应用程序具有从控制器调用的日志方法。
它必须记录 cartid
如果用户第一次将产品添加到购物车,控制器会使用新的 guid 创建购物车 ID,并将 cartid cookie 添加到响应中。
logger 方法使用 Request.Cookies["cartid"]
来记录购物车。
对于添加到购物车的第一件商品,它 return 为空,因为浏览器未设置 cookie。
Response.Cookies["cartid"]
不存在。
Log 方法可以从很多地方调用。很难将 cartid 作为参数传递给它。
应用程序具有从控制器调用的日志方法。它将控制器上下文记录到控制器使用的同一数据库中。
在使用 ASP.NET 核心应用程序模板创建的错误控制器中执行日志记录:
public async Task<IActionResult> Error()
{
var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
await logger.LogExceptionPage(exceptionHandlerPathFeature);
HttpContext.Response.StatusCode = 500;
return new ContentResult() {
Content ="error"
};
}
如何通过错误前执行的代码在此方法中记录响应 cookie?
导致编译错误的代码:
public class CartController : ControllerBase
{
const string cartid = "cartid";
private readonly HttpContextAccessor ca;
public CartController(HttpContextAccessor ca)
{
this.ca = ca;
}
public IActionResult AddToCartTest(int quantity, string product)
{
ca.HttpContext.Response.Cookies.Append(cartid, Guid.NewGuid().ToString());
Log("AddToCartStarted");
return View();
}
void Log(string activity)
{
Console.WriteLine($"{activity} in cart {ca.HttpContext.Response.Cookies[cartid]}");
}
}
您无法从 Response 中读取 Cookie。您需要按照以下方式从请求中读取它
ca.HttpContext.Request.Cookies[cartId];
cartId 是存储在 Cookie 中的值的键。