Asp.net 设置cookie不需要';web请求之间不能持久
我创建了一个全新的ASP.NET4.6MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索该值。我使用cookies是因为Asp.net 设置cookie不需要';web请求之间不能持久,asp.net,asp.net-mvc,cookies,Asp.net,Asp.net Mvc,Cookies,我创建了一个全新的ASP.NET4.6MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索该值。我使用cookies是因为会话在应用程序_BeginRequest方法中还不可用。使用下面的代码,我请求的cookie值在我发出的每个请求中都为null,尽管设置了它 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start()
会话
在应用程序_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;
}
}
我做错了什么?我看到的所有关于cookies的帖子都显示了以这种方式设置/获取cookies,其中包含
Request.cookies.Get
/Request.cookies.Add
如果你想获取每个请求的状态,你必须在应用程序中执行
您的应用程序\u AcquisiteRequestState
实现应该是:
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);
}
}
如果要获取每个请求的状态,必须在应用程序中执行
您的应用程序\u AcquisiteRequestState
实现应该是:
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);
}
}
你没有在这段代码中设置cookie,你只是在读它,我犯了同样的错误。用这个
this.Response.Cookies.Add(cookie);
而不是
this.Request.Cookies.Add(cookie);
您现在应该可以在google chromes应用程序->站点Cookies中看到它了您没有在这段代码中设置cookie您只是在阅读它,我犯了同样的错误。用这个
this.Response.Cookies.Add(cookie);
而不是
this.Request.Cookies.Add(cookie);
你现在应该可以在谷歌chromes应用程序->你网站的Cookies中看到它了我已经试过了,但从来没有被点击过。我设置了一个断点,VS在这个方法中永远不会中断。我最终通过用响应而不是请求设置cookie来修复它。cookie值在下一个请求中对我可用。感谢点击应用程序\u BeginRequest后,它应该转到应用程序\u AcquisiteRequestState,但我建议您使用应用程序\u AcquisiteRequestState。我刚刚在VS 2015 IIS Express中尝试过,效果很好。我尝试过,但从未点击过。我设置了一个断点,VS在这个方法中永远不会中断。我最终通过用响应而不是请求设置cookie来修复它。cookie值在下一个请求中对我可用。谢谢,点击应用程序\u BeginRequest后,它应该转到应用程序\u AcquisiteRequestState,但我建议您使用应用程序\u AcquisiteRequestState。我刚刚在VS 2015 IIS Express中试用过,效果很好