c# - 读/写Cookie

扫码查看

我今天加入了该站点,希望有人能对我解释一下ASP.NET中Cookie的错误之处。
如果我的问题太基本了,我仍在学习如此节俭,但是我无法在google上找到答案。我找到的每个答案都显示了我已经拥有的代码。

我正在尝试创建和读取Cookie,并将此代码放入我的应用程序构造函数中。这就是我尝试初始化Cookie并将其添加到浏览器的方式。

global.asax.cs

    public MyApplication()
    {
        myCookie = new HttpCookie("UserSettings");
        myCookie.Value = "nl";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        Response.Cookies.Add(myCookie);
    }

HomeController.cs中的一个方法(尝试读取Cookie)
    public void setLang(string lang)
    {
        HttpCookie myCookie = Request.Cookies["UserSettings"];
        myCookie.Value = lang;
        //rest of method

我在Response.Cookies.Add(myCookie)遇到错误;
[HttpException(0x80004005):在这种情况下,响应不可用。

我的想法是我可能忘记了导入命名空间之类的东西,但是我似乎没有解决此错误的方法,有人能指出我正确的方向吗?

最佳答案

您不能使用Global.asax构造函数向响应添加cookie,因为在应用程序开始处理HTTP请求之前,将调用Global.asax构造函数。

将代码从Global.asax构造函数移动到Application_BeginRequest方法:

public void Application_BeginRequest()
{
    myCookie = new HttpCookie("UserSettings");
    myCookie.Value = "nl";
    myCookie.Expires = DateTime.Now.AddDays(1d);
    Response.Cookies.Add(myCookie);
}

Global.asax有许多不同的事件被触发,您只是选择了错误的。
  • Application_Init:在应用程序首次初始化时触发。
  • Application_Start:首次启动应用程序时触发。
  • Session_Start:首次启动用户 session 时触发。
  • Application_BeginRequest:每当有新请求进入时触发。
  • Application_EndRequest:请求结束时触发。
  • Application_AuthenticateRequest:指示已准备好对请求进行身份验证。
  • Application_Error:在应用程序中发生未处理的错误时触发。
  • Session_End:每当单个用户 session 结束或超时时触发。
  • Application_End:在应用程序结束或超时时触发(通常用于应用程序清除逻辑)。

  • (来自http://en.wikipedia.org/wiki/Global.asax)

    10-07 19:42
    查看更多