我知道它是一个菜鸟问题,但只是想知道GetResponseStream()
在任何情况下是否都能返回null?
答案 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的内容。