我知道这是一个菜鸟问题,但只是想知道GetResponseStream()
在任何情况下是否可以返回 null ?
问问题
4460 次
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 回答