Подтвердить что ты не робот

Может ли WebResponse.GetResponseStream() вернуть null?

Я знаю его вопрос noob, но просто хотел знать, может ли GetResponseStream() вернуть нуль в любом случае?

4b9b3361

Ответ 1

Ну, это похоже на конкретный подкласс - но я никогда не видел подкласса, который делает это, и он не задокументирован как действительное возвращаемое значение. Я никогда не видел, чтобы какой-либо код был написан для защиты, и я не ожидал. Чтобы не сказать, что такого кода не существует, но я не думаю, что это необходимо.

Если в ответе нет содержимого (но ответ был успешным), я ожидал бы, что любая хорошая реализация вернет пустой поток.

Ответ 2

Нет встроенного типа, полученного из WebResponse, в частности HttpWebResponse, может вернуть значение null.. Это суеверное убеждение ввел в заблуждение многих разработчиков. Не проверяйте значение null. Такой код является мертвым кодом.

Что означало бы значение null даже для возврата пустого потока?! Это не имеет смысла.

Кроме того, GetResponse() не может вернуть значение null. Опять же, что это значит? Протокол HTTP не поддерживает понятие "нулевого ответа". Если это когда-либо случается из-за ошибки библиотеки, все равно невозможно справиться с этой ситуацией. Любая такая проверка не помогает.

Можно создавать классы, полученные из 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();
}

Он демонстрирует, как сжато и безопасно читать содержимое URL-адреса HTTP с помощью HttpWebRequest.