Asp.net 设置cookie不需要';web请求之间不能持久

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()

我创建了一个全新的ASP.NET4.6MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索该值。我使用cookies是因为
会话
应用程序_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中试用过,效果很好