我定义了一个类来通过用户接收的参数创建cookie。当我想向上下文添加cookie时,我收到一个例外。
我的班级
public static class ManageCookies
{
public static void Create(string name, string value)
{
HttpCookie cookie = new HttpCookie(name);
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(1);
HttpContext.Current.Response.Cookies.Add(cookie);
}
}
Occured Exception:响应在此上下文中不可用。
我知道它与当前子进程中的上下文正在执行。 我建议我的函数将当前的HttpResponse作为参数传递给它!
public static class ManageCookies
{
public static void Create(string name, string value, HttpResponse response)
{
HttpCookie cookie = new HttpCookie(name);
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(1);
response.Cookies.Add(cookie);
}
public static void PrePareForApplicationStart()
{
Create("somecookie", "somevalue", _context);
}
}
这是正确的方法吗?为什么?你有另一种方式吗?
更新:Oppps!使用这种方式仍然有第一个例外! :((帮助帮助
ManageCookies manager = new ManageCookies(this.Context);
manager.PrePareForApplicationStart();
我使用上面的代码将HTTPContext对象发送到定义的类。它从Application_Start事件调用。
和ManageCookies类更新如下:
public class ManageCookies
{
private HttpContext _context;
public ManageCookies(HttpContext context)
{
this._context = context;
}
}
我使用此变量(_context)添加cookie!
答案 0 :(得分:2)
您提供的代码不是问题,您可以从中调用它。如果您在刷新响应后调用它,或者从分配用于处理请求的线程之外的线程调用它 - 您可以获得各种问题
回应Sadegh的澄清:
这正是重点。应用程序启动仅在应用程序生存期内发生我想你希望这个cookie作为每个响应的一部分提供。换句话说,ApplicationStart不适合这样做。您可以在PreRender结束前的页面生命周期中的任何时刻执行此操作