【发布时间】:2020-11-16 17:04:37
【问题描述】:
我正在 ASP.NET Core WebApp 中设置和获取 cookie。 Microsoft Docs 表示“使用 HttpResponse.Cookies 集合添加 cookie 后,即使尚未将响应发送到客户端,该 cookie 也会立即在 HttpRequest.Cookies 集合中可用” .但是,我发现设置后无法立即读取cookie;请参阅下面的 Set(),它总是返回 false。也就是说,浏览器的存储检查器显示它实际上已设置。
SO 3230133 在 PHP 的上下文中提出了相同的问题,并且答案表明在将响应发送回客户端之前不会设置 cookie,并且在您的 PHP 中不可用,直到来自之后的客户。在 ASP.NET Core 的上下文中是否也是如此?是否有类似于 PHP $_COOKIE['uname'] 的解决方法,用于在某处设置 cookie 值,以便在客户端发出下一个请求之前读取它?
Microsoft Docs 与 .NetFramework 4.8 相关,但没有 .Net Core 的替代品。这对前者有效,但对后者无效?
public class MyCookies
{
public IHttpContextAccessor Accessor { get; private set; }
public MyCookies(IHttpContextAccessor accessor)
{
Accessor = accessor;
}
public bool Set(string name, string value)
{
var rc = false;
Accessor.HttpContext.Response.Cookies.Append(name, value);
if (Accessor.HttpContext.Request.Cookies.TryGetValue(name, out var result) && (result == value))
rc = true;
return rc;
}
}
public class SettingsModel : PageModel
{
private readonly IHttpContextAccessor _httpContextAccessor;
public SettingsModel(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public IActionResult OnPost()
{
var cookies = new MxCookies(_httpContextAccessor);
if (cookies.SetValue(".AspNetCore.Culture", "fr-CH") == false)
{
var stop = true;
}
return new RedirectToPageResult("Index");
}
}
别忘了在 Startup.ConfigureServices() 中调用 services.AddHttpContextAccessor()
【问题讨论】:
标签: c# asp.net-core cookies