由于以下行为,我花了半天时间追踪错误: -
想象一下,在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
班级有这种行为的理性.
为什么?猜测是因为它有道理。如果您对响应执行任何操作,典型的用例是您希望将内容发送到浏览器。
您检查入站值 (Request.Cookies),然后将它们设置为出站值 (Response.Cookies)。请求是读取,响应是写入。
归档时间: |
|
查看次数: |
2843 次 |
最近记录: |