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

本文关键字:返回 null GetResponseStream WebResponse | 更新日期: 2023-09-27 18:16:52

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

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

嗯,这有点取决于具体的子类-但我从未见过任何子类这样做,并且它不是文档作为有效的返回值。我从来没有见过任何编写的代码来防御性地检查这个问题,我也不希望这样做。这并不是说这样的代码不存在,但我认为没有必要。

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

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

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

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

可以创建从WebResponse派生的类,返回像null这样疯狂的值。没有内置类这样做,它应该被认为是一个bug返回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的内容。