我今天加入了该站点,希望有人能对我解释一下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)