Какая схема использования HttpResponseMessage.EnsureSuccessStatusCode()
? Он удаляет содержимое сообщения и выбрасывает HttpRequestException
, но я не вижу, как программно обрабатывать его иначе, чем общий Exception
. Например, он не включает в себя HttpStatusCode
, что было бы удобно.
Есть ли способ получить от этого больше информации? Может ли кто-нибудь показать соответствующий шаблон использования как для EnsureSuccessStatusCode()
HttpRequestException?
источник
(int)response.StatusCode
(см. Msdn.microsoft.com/en-us/library/… )Мне не нравится EnsureSuccessStatusCode, поскольку он не возвращает ничего значимого. Поэтому я создал собственное расширение:
исходный код для Microsoft EnsureSuccessStatusCode можно найти здесь
Синхронная версия на основе ссылки SO :
Что мне не нравится в IsSuccessStatusCode, так это то, что его нельзя "красиво" повторно использовать. Например, вы можете использовать библиотеку наподобие polly, чтобы повторить запрос в случае проблем с сетью. В этом случае вам нужно, чтобы ваш код генерировал исключение, чтобы polly или какая-либо другая библиотека могла его обработать ...
источник
EnsureSuccessStatusCode
. Вы всегда удаляетеresponse.Content
(потому что finally всегда вызывается даже послеreturn;
оператора), и он уничтожает содержимое для дальнейшего чтения. Исходная реализация удаляет контент только тогда, когда код состояния не указывает на успешный результат.await response.Content.ReadAsStringAsync()
а потом проверяетеif (response.Content != null)
HttpRequest
вызовов и настроить политику как для обработки определенных исключений, так и определенныхHttpResponseCode
s. См. Пример в readme Polly здесьresponse.Content
быть null, если для него только что был вызван метод?Я использую EnsureSuccessStatusCode, когда не хочу обрабатывать исключение тем же методом.
Исключение, созданное в GetUserIdAsync, будет обработано в DoSomethingAsync.
источник
Ниже представлено мое предлагаемое решение. Единственный недостаток заключается в том, что, поскольку диспетчер ресурсов платформы ASP.NET Core является внутренним по отношению к платформе, я не могу напрямую повторно использовать интернационализированные строки сообщений Microsoft, поэтому здесь я просто использую буквальный буквальный текст сообщения на английском языке.
Плюсы
ConfigureTestContainer<T>
Минусы
response.EnsureSuccessStatusCode();
и позвольте серверу разобраться с этим.Content
Перед проверкой статуса требуется прочитать свойство. Возможны ситуации, когда это нежелательно, одна из которых - неэффективность.использование
API
источник