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

时间:2013-06-04 06:20:46

标签: c# .net

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

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:4)

没有派生自WebResponse的内置类型,特别是HttpWebResponse,可以返回null。这种迷信的信念误导了许多开发人员。不要检查是否为空。这样的代码就是死代码。

与返回空流相比,什么是null甚至意味着什么?!这没有意义。

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

可以创建派生自WebResponse的类,这些类返回诸如null之类的疯狂值。没有内置类可以做到这一点,它应该被视为返回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();
}

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