我创建了一个全新的ASP.Net 4.6 MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索它。我使用Cookie是因为Session
在Application_BeginRequest
方法中尚未提供。使用下面的代码,我要求的cookie值在我做的每个请求中都是null,尽管设置它。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest()
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
if (string.IsNullOrEmpty(value))
{
cookie = new HttpCookie("Foo", "Bar");
cookie.Expires = System.DateTime.UtcNow.AddHours(1);
this.Request.Cookies.Add(cookie);
}
}
protected void Application_EndRequest()
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
}
}
我做错了什么?我见过的与Cookie有关的所有帖子都显示以Request.Cookies.Get
/ Request.Cookies.Add
的方式设置/获取它们。
答案 0 :(得分:1)
如果您想为每个请求获取状态,则必须在Application_AcquireRequestState
您的Application_AcquireRequestState
实施应该是:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
if (string.IsNullOrEmpty(value))
{
cookie = new HttpCookie("Foo", "Bar");
cookie.Expires = System.DateTime.UtcNow.AddHours(1);
this.Request.Cookies.Add(cookie);
}
}
答案 1 :(得分:1)
您没有在此代码中设置cookie,而只是在读取它,我犯了同样的错误。使用这个
this.Response.Cookies.Add(cookie);
代替
this.Request.Cookies.Add(cookie);
您现在应该在Google chrome应用程序->您网站的Cookie中看到它