WebResponse.GetResponseStream()可以返回null吗?

iot*_*ngh 16 .net c#

我知道它是一个菜鸟问题,但只是想知道GetResponseStream()在任何情况下是否都能返回null?

Jon*_*eet 15

好吧,它取决于具体的子类 - 但我从未见过任何子类,它没有记录为有效的返回值.我从未见过任何用于防御性检查的代码,我不希望这样.这并不是说这样的代码不存在,但我不认为这是必要的.

如果响应中没有内容(但响应成功),我希望任何好的实现都返回一个空流.

  • @iotaSingh:我怎么能给你一个链接?我说它没有记录*.我没有说它被记录为不是有效的返回值,我说它没有记录为有效的返回值.这些是非常*不同的陈述. (4认同)

usr*_*usr 5

派生自 的任何内置类型WebResponse,尤其是HttpWebResponse,都不能返回 null。这种迷信误导了许多开发人员。不要检查空值。这样的代码是死代码。

与返回空流相比,null 甚至意味着什么?!这根本不符合逻辑。

此外,GetResponse()不能返回空值。再说一遍,这是什么意思?!HTTP 协议不支持“空响应”的概念。如果由于库错误而发生这种情况,无论如何都无法处理这种情况。任何此类检查都无济于事。

可以创建派生自WebResponse返回疯狂值的类,例如null. 没有内置类会这样做,应该将 return 视为错误null。派生自的类WebResponse非常罕见。我从来没有见过一个。

这是一个很好的代码模式:

var request = WebRequest.Create("http://example.org/");

using (var response = request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var responseReader = new StreamReader(responseStream))
{
    var contents = responseReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

它演示了如何使用 简洁而安全地读取 HTTP URL 的内容HttpWebRequest