为什么HttpContext.Response.Cookies ["foo"]添加cookie?

Chr*_*ell 7 asp.net

由于以下行为,我花了半天时间追踪错误: -

想象一下,在Http请求或响应的cookie集合中没有名为"foo"的cookie.以下代码返回null

A) HttpContext.Current.Request.Cookies["foo"]
Run Code Online (Sandbox Code Playgroud)

以下代码创建一个名为"foo"的新cookie(带有path ="/"和空值),将其添加到响应的cookie集合中并返回

B) HttpContext.Current.Response.Cookies["foo"]
Run Code Online (Sandbox Code Playgroud)

所以(B)的副作用是在客户端的浏览器上覆盖任何预先存在的名为"foo"的cookie.

这不是一个错误.有人故意对此进行编码.这是Get方法的反汇编(Item [string name] indexer委托给这个方法.

    public HttpCookie Get(String name) {
        HttpCookie cookie = (HttpCookie)BaseGet(name); 

        if (cookie == null && _response != null) { 
            // response cookies are created on demand 
            cookie = new HttpCookie(name);
            AddCookie(cookie, true); 
            _response.OnCookieAdd(cookie);
        }

        return cookie; 
    }
Run Code Online (Sandbox Code Playgroud)

显然,MSDN文档没有提到这种行为(尽管有些用户在描述此行为的文档底部添加了注释).

我的问题是,有人可以向我解释为什么HttpCookieCollection班级有这种行为的理性.

blo*_*art 1

为什么?猜测是因为它有道理。如果您对响应执行任何操作,典型的用例是您希望将内容发送到浏览器。

您检查入站值 (Request.Cookies),然后将它们设置为出站值 (Response.Cookies)。请求是读取,响应是写入。

  • 这应该是一个BUG。它不直观,它不包含在 .dll 文档中。当执行异步时,如果您在同一请求中访问 c​​ookie,Request.Cookies 将比 Response.Cookies 旧。 (3认同)