Qual é o padrão de uso HttpResponseMessage.EnsureSuccessStatusCode()
? Ele descarta o conteúdo da mensagem e o lança HttpRequestException
, mas não consigo ver como lidar com isso de forma diferente de um genérico Exception
. Por exemplo, não inclui o HttpStatusCode
, o que teria sido útil.
Existe alguma maneira de obter mais informações sobre isso? Alguém poderia mostrar o padrão de uso relevante de ambos EnsureSuccessStatusCode()
e HttpRequestException?
fonte
(int)response.StatusCode
(Consulte msdn.microsoft.com/en-us/library/… )Eu não gosto de VerifySuccessStatusCode, pois não retorna nada significativo. É por isso que criei minha própria extensão:
o código-fonte para o VerifySuccessStatusCode da Microsoft pode ser encontrado aqui
Versão síncrona baseada no link SO :
O que eu não gosto em IsSuccessStatusCode é que não é "bem" reutilizável. Por exemplo, você pode usar a biblioteca como polly para repetir uma solicitação em caso de problema de rede. Nesse caso, você precisa que seu código levante uma exceção para que polly ou alguma outra biblioteca possa lidar com isso ...
fonte
EnsureSuccessStatusCode
. Você sempre descarta oresponse.Content
(porque finalmente é chamado sempre mesmo após oreturn;
enunciado) e ele destrói o conteúdo para leitura posterior . A implementação original descarta o conteúdo apenas quando o código de status não indica um resultado bem-sucedido.await response.Content.ReadAsStringAsync()
e depois verifiqueif (response.Content != null)
HttpRequest
chamadas e configurar a política para lidar com certas exceções e certosHttpResponseCode
s. Veja o exemplo no leia-me de Polly aquiresponse.Content
ser null quando acaba de ter um método chamado?Eu uso VerifySuccessStatusCode quando não quero lidar com a exceção no mesmo método.
A exceção lançada em GetUserIdAsync será tratada em DoSomethingAsync.
fonte
Abaixo está minha solução proposta. A única falha é que, como o gerenciador de recursos da estrutura ASP.NET Core é interno à estrutura, não posso reutilizar diretamente as strings de mensagem internacionalizadas da Microsoft, então estou apenas usando o literal de mensagem em inglês literal aqui.
Prós
ConfigureTestContainer<T>
Contras
response.EnsureSuccessStatusCode();
e deixar o servidor lidar com isso.Content
propriedade antes de verificar o status. Pode haver situações em que isso não seja desejável, uma das quais é a ineficiência.Uso
API
fonte