基本上,我试图从cookie中获取字符串值。
如果我只是从请求中读取它...我可以获得价值。 除了第一页加载,因为响应没有转到客户端并返回,所以请求没有我刚刚设置的值。
然而,奇怪的是..如果我访问Response并检查它是否存在(也就是设置的值)..我可以得到该值。但它导致了一些奇怪的错误(?),其中cookie在下次返回时在请求中重复。
在第二个请求返回..而是从空白的重复请求cookie中读取值。 (aka,cookie值不起作用)
保存
var request = url.RequestContext.HttpContext.Request;
var response = url.RequestContext.HttpContext.Response;
//STORE VALUES TO COOKIE
HttpCookie hc = new HttpCookie("myCookie");
hc.Expires = DateTime.Now.AddDays(1);
hc.Value = "MYVALUE";
request.Cookies.Add(hc);
response.Cookies.Add(hc);
READ
public static string GetAdvancedCookieValue(this UrlHelper url, string cookieName)
{
var request = url.RequestContext.HttpContext.Request;
var response = url.RequestContext.HttpContext.Response;
// Accessing Response allows me to get value just set.. but leads to duplicate cookies (with blank data -causing blank return later)
if (response.Cookies[cookieName] != null && String.IsNullOrWhiteSpace(response.Cookies[cookieName].Value) == false)
return response.Cookies[cookieName].Value;
if (request.Cookies[cookieName] != null && String.IsNullOrWhiteSpace(request.Cookies[cookieName].Value) == false)
return request.Cookies[cookieName].Value;
return null;
}
答案 0 :(得分:1)
在Save方法中,您应该检查具有该名称的cookie是否已经在集合中。
类似的东西:
var cookie = response.Cookies[hc.Name];
if (cookie == null) {
response.Cookies.Add(hc);
}
else
{
cookie.Value = hc.Value;
cookie.Expires = hc.Expires;
}
请记住,Request.Cookies
集合中的所有Cookie都会复制到Response.Cookies
集合中。如果您在添加Cookie之前未检查其存在,则最终会得到两个同名的Cookie。
答案 1 :(得分:1)
出于任何原因,执行空检查response.Cookies[cookieName] != null
似乎创建了cookie ...所以我添加了一个检查,如果值为null,则删除它。以便不向客户发布空白cookie更换。
我现在可以访问最近的值,包括最近添加到响应中的值,而不会消除cookie值。
public static string GetAdvancedCookieValue(UrlHelper url, string cookieName)
{
var request = url.RequestContext.HttpContext.Request;
var response = url.RequestContext.HttpContext.Response;
if (response.Cookies[cookieName] != null)
{
if (response.Cookies[cookieName].Value == null)
response.Cookies.Remove(cookieName);
else
return response.Cookies[cookieName].Value;
}
if (request.Cookies[cookieName] != null && String.IsNullOrWhiteSpace(request.Cookies[cookieName].Value) == false)
return request.Cookies[cookieName].Value;
return null;
}
答案 2 :(得分:-1)
对于两个cookie集合,检查cookie是否存在的方法是检查cookie集合AllKeys属性的名称。