创建cookie时,在此上下文中无法响应

时间:2010-04-03 19:43:04

标签: asp.net-mvc

我定义了一个类来通过用户接收的参数创建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!

1 个答案:

答案 0 :(得分:2)

您提供的代码不是问题,您可以从中调用它。如果您在刷新响应后调用它,或者从分配用于处理请求的线程之外的线程调用它 - 您可以获得各种问题

回应Sadegh的澄清:

这正是重点。应用程序启动仅在应用程序生存期内发生我想你希望这个cookie作为每个响应的一部分提供。换句话说,ApplicationStart不适合这样做。您可以在PreRender结束前的页面生命周期中的任何时刻执行此操作