我遇到了奇怪的情况。仅当字符串是硬编码时,才会保留set cookie。
public void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Items["Theam"] != null)
{
var sTheam = filterContext.HttpContext.Items["Theam"].ToString();
HttpCookie theamCookie = new HttpCookie("TheamCookie");
theamCookie.Values.Add("TheamVal", sTheam);
theamCookie.Expires = DateTime.UtcNow.AddDays(5);
HttpContext.Current.Response.Cookies.Add(theamCookie);
}
}
无论我做什么,cookie都不会持久存在。只有当将sTheam替换为类似于"丘比特"该值是持久的。那是
theamCookie.Values.Add("TheamVal", "cupid");
无效。
任何人都可以对发生的事情有所了解吗?我筋疲力尽,完全没有选择。经过8个多小时的调试,我意识到了这一点。但不确定为什么会发生这种情况。请帮忙。
更新:以下是CookieFilter。这是一个ASP.NET MVC应用程序。
public class CookieFilter : IActionFilter
{
//private const string sTheamCookieName = "TheamCookie";
public void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Items["TheamToBrowser"] != null)
{
var sTheam = ((string)(filterContext.HttpContext.Items["TheamToBrowser"])).ToString(CultureInfo.InvariantCulture);
HttpCookie theamCookie = new HttpCookie("TheamCookie");
theamCookie.Values["TheamVal"] = "shamrock";
theamCookie.Expires = DateTime.UtcNow.AddDays(5);
filterContext.HttpContext.Response.Cookies.Add(theamCookie);
}
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContextBase context = filterContext.HttpContext;
HttpCookie theamCookie = context.Request.Cookies["TheamCookie"];
if (theamCookie == null)
context.Items["TheamFromBrowser"] = "default";
else
{
if (string.IsNullOrEmpty(theamCookie.Value))
{
context.Items["TheamFromBrowser"] = "default";
}
else
context.Items["TheamFromBrowser"] = theamCookie.Values["TheamVal"].ToString();
}
}
}
答案 0 :(得分:0)
关于这一行:
if (filterContext.HttpContext.Items["Theam"] != null)
HttpContext.Items
是请求级别的设置。这意味着您需要在每个HTTP请求上重新加载它。如果您在执行此代码之前未在请求生命周期的某个位置设置HttpContext.Items["Theam"]
,则它将始终为空。
我不确定这是你的问题,但它可以解释为什么你手动设置变量时代码的其余部分正常工作。