Quel est le modèle d'utilisation HttpResponseMessage.EnsureSuccessStatusCode()
? Il supprime le contenu du message et le lance HttpRequestException
, mais je ne vois pas comment le gérer par programme différemment d'un générique Exception
. Par exemple, il n'inclut pas le HttpStatusCode
, ce qui aurait été pratique.
Existe-t-il un moyen d'en tirer plus d'informations? Quelqu'un pourrait-il montrer le modèle d'utilisation pertinent des deux EnsureSuccessStatusCode()
et HttpRequestException?
la source
(int)response.StatusCode
(Voir msdn.microsoft.com/en-us/library/… )Je n'aime pas EnsureSuccessStatusCode car il ne renvoie rien de signifiant. C'est pourquoi j'ai créé ma propre extension:
le code source d'EnsureSuccessStatusCode de Microsoft peut être trouvé ici
Version synchrone basée sur le lien SO :
Ce que je n'aime pas avec IsSuccessStatusCode, c'est qu'il n'est pas "joliment" réutilisable. Par exemple, vous pouvez utiliser une bibliothèque comme polly pour répéter une requête en cas de problème de réseau. Dans ce cas, vous avez besoin que votre code lève une exception afin que polly ou une autre bibliothèque puisse la gérer ...
la source
EnsureSuccessStatusCode
. Vous disposez toujours duresponse.Content
(car finalement est appelé toujours même après l'return;
instruction) et il détruit le contenu pour une lecture ultérieure. L'implémentation d'origine supprime le contenu uniquement lorsque le code d'état n'indique pas de résultat réussi.await response.Content.ReadAsStringAsync()
, puis vérifiezif (response.Content != null)
HttpRequest
appels et configurer la stratégie à la fois pour gérer certaines exceptions et certainesHttpResponseCode
s. Voir l' exemple dans le readme de Polly iciresponse.Content
être nul alors qu'il vient de recevoir une méthode appelée?J'utilise EnsureSuccessStatusCode lorsque je ne veux pas gérer l'exception sur la même méthode.
L'exception levée sur GetUserIdAsync sera gérée sur DoSomethingAsync.
la source
Voici ma solution proposée. Le seul défaut est que, puisque le gestionnaire de ressources du framework ASP.NET Core est interne au framework, je ne peux pas réutiliser directement les chaînes de message internationalisées de Microsoft, donc j'utilise simplement le littéral de message anglais textuel ici.
Avantages
ConfigureTestContainer<T>
Les inconvénients
response.EnsureSuccessStatusCode();
et laissez le serveur s'en occuper.Content
propriété avant de vérifier l'état. Il peut y avoir des situations où cela n'est pas souhaitable, dont l'inefficacité.Usage
API
la source