当创建cookie时,响应在此上下文中不可用

问题描述:

您好,我定义了一个类,用于通过接收到的来自用户的参数创建cookie。当我想添加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); 
    } 

}

发生异常:响应是不是在这种情况下可用。


我知道它与执行当前子内的上下文相连接。 我建议我的函数将当前的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),以增加饼干!

您提供的代码是不是问题问题是你来自哪里调用它。如果你的响应后把它叫做是冲洗或FR OM比分配到处理您的请求的另一个线程 - 你可以得到各种各样的问题

在回应澄清萨德克:

这也正是这一点。应用程序启动仅在应用程序生存期内发生我想你希望这个cookie作为每个响应的一部分来传递。换句话说,ApplicationStart不适合做这件事。您可以将网页生命周期中任何时候做之前预渲染

+0

是结束,我知道,但是使用在ApplicationStart事件这个方法就是一个例子。我想调用PrePareForApplicationStart方法为第一次应用程序运行创建必要的cookie!我的问题是上面的方法(创建)!谢谢亲爱的mfeingold – Sadegh 2010-04-04 14:50:28