为什么.NET在请求不存在的cookie时不返回null?

时间:2015-01-09 15:31:58

标签: c# asp.net cookies

如果我使用以下代码检索cookie:

Request.Cookies.Get("LoremIpsum")

并且这个cookie不存在我会得到一个空的cookie而不是null。这是为什么?

当我想查看Response cookie集合以及请求cookie集合时,它会导致一些问题。如果我想要的cookie在响应中不存在,它会在响应cookie集合中添加一个空cookie,然后将其返回给我。因此,在页面加载后,请求中存在的cookie将被空响应cookie替换。

真的很讨厌,我猜测.NET必须有一个原因而不是只返回null?

1 个答案:

答案 0 :(得分:2)

  

它引起了一些问题

它不应该,因为它是documented

  

如果指定的cookie不存在,则此方法将创建一个具有该名称的新cookie。

所以不要在没有检查的情况下分配它:

var cookie = Request.Cookies.Get("LoremIpsum");
if (!string.IsNullOrEmpty(cookie.Value))
{
    Response.Cookies["LoremIpsum"] = cookie;
}

或者,不要使用Get(),而是使用indexer,如果给定的Cookie不存在,则会返回null

var cookie = Request.Cookies["LoremIpsum"];
if (cookie != null)
{
    Response.Cookies["LoremIpsum"] = cookie;
}