Получение кода HttpStatus 0

Почему я получаю HttpStatusCode 0, если я указываю, что мой клиент подключается к плохому URL-адресу.

My statusCodeAsInt отображается как 0. Почему он не отображается как 404 и обрабатывается?

IRestResponse response = client.Execute(restReq);
HttpStatusCode statusCode = response.StatusCode;

var statusCodeAsInt = (int) statusCode;

        if (statusCodeAsInt >= 500)
        {
            throw new InvalidOperationException("A server error occurred: " + response.ErrorMessage, response.ErrorException);
        }
        if (statusCodeAsInt >= 400)
        {
            throw new InvalidOperationException("Request could not be understood by the server: " + response.ErrorMessage,
                response.ErrorException);
        }

Каков правильный способ обработки этого RestResponse?

Ответ 1

Код ответа 0 обычно означает, что ответ был пуст, т.е. даже заголовки не были возвращены.

Это обычно происходит, когда соединение принимается, а затем закрывается грациозно, также известное как соединение FIN. В этом случае сервер заявляет, что он закончил вещание для вас, но будет продолжать прослушивать новые сообщения. Возможно, проблема с брандмауэром.

Другое дело - изменить IRestResponse на RestResponse. Использование IRestResponse не дает никаких преимуществ в этом сценарии.

Ответ 2

В моем случае это не было проблемой брандмауэра, в результате чего StatusCode равнялся 0. Мы использовали устаревшее приложение, которое все еще использовало TLS 1.0 на сервере, который заблокировал соединения TLS 1.0. Как только мы включили TLS 1.2, мы получили ожидаемые коды состояния.

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Ответ 3

Я думаю, что код статуса 0 означает, что код статуса отсутствует. Это также может означать, что ошибка была в RestSharp, а не в ответе. С кодом состояния 0, возможно, запрос даже не был отправлен.

Проверьте наличие .ErrorException/.ErrorMessage.

Ответ 4

В моем случае я просто указал неверное имя хоста.