17

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

4

2 回答 2

15

好吧,这取决于具体的子类——但我从未见过任何这样做的子类,并且它没有记录为有效的返回值。我从未见过编写任何代码来防御性地检查这一点,我也不希望这样做。这并不是说这样的代码不存在,但我认为没有必要。

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

于 2013-06-04T06:22:55.337 回答
5

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

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

此外,GetResponse()不能返回 null。再说一遍,这是什么意思?!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();
}

它演示了如何使用HttpWebRequest.

于 2016-10-05T13:07:19.250 回答