Can WebResponse.GetResponseStream() return a null?

前端 未结 2 1074
旧巷少年郎
旧巷少年郎 2021-01-17 11:29

i know its a noob question, but just wanted to know whether GetResponseStream() can return null in any case?

2条回答
  •  一整个雨季
    2021-01-17 11:59

    No built-in type derived from WebResponse, in particular HttpWebResponse, can return null. This superstitious belief has misled many developers. Don't check for null. Such code is dead code.

    What would null even mean compared to returning an empty stream?! This does not make sense.

    Also, GetResponse() cannot return null. Again, what is that supposed to mean?! The HTTP protocol does not support the notion of a "null response". If that ever happens due to a library bug it's not possible to handle that situation anyway. Any such check does not help.

    It is possible to create classes derived from WebResponse that return an insane values such as null. No built-in class does that and it should be considered a bug to return null. Classes derived from WebResponse are very rare. I have never seen one.

    Here's a good code pattern to use:

    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();
    }
    

    It demonstrates how to succinctly and safely read the contents of an HTTP URL using HttpWebRequest.

提交回复
热议问题