Was ist das Nutzungsmuster von HttpResponseMessage.EnsureSuccessStatusCode()
? Es verfügt über den Inhalt der Nachricht und wirft HttpRequestException
, aber ich sehe nicht ein, wie ich programmgesteuert anders damit umgehen soll als mit einem Generikum Exception
. Zum Beispiel enthält es nicht das HttpStatusCode
, was praktisch gewesen wäre.
Gibt es eine Möglichkeit, mehr Informationen daraus zu ziehen? Könnte jemand das relevante Verwendungsmuster von sowohl EnsureSuccessStatusCode()
HttpRequestException als auch HttpRequestException anzeigen?
quelle
(int)response.StatusCode
(Siehe msdn.microsoft.com/en-us/library/… )Ich mag EnsureSuccessStatusCode nicht, da es nichts Sinnvolles zurückgibt. Deshalb habe ich meine eigene Erweiterung erstellt:
Der Quellcode für den EnsureSuccessStatusCode von Microsoft ist zu finden hier
Synchrone Version basierend auf SO-Link :
Was ich an IsSuccessStatusCode nicht mag, ist, dass es nicht "schön" wiederverwendbar ist. Beispielsweise können Sie eine Bibliothek wie polly verwenden , um eine Anforderung im Falle eines Netzwerkproblems zu wiederholen. In diesem Fall muss Ihr Code eine Ausnahme auslösen, damit polly oder eine andere Bibliothek damit umgehen kann ...
quelle
EnsureSuccessStatusCode
. Sie entsorgen das immerresponse.Content
(weil schließlich auch nach derreturn;
Anweisung immer aufgerufen wird ) und es zerstört den Inhalt zum weiteren Lesen. Die ursprüngliche Implementierung entsorgt den Inhalt nur, wenn der Statuscode kein erfolgreiches Ergebnis anzeigt.await response.Content.ReadAsStringAsync()
und dann überprüfenif (response.Content != null)
HttpRequest
Anrufe geschützt werden, und die Richtlinie so konfigurieren, dass sowohl bestimmte Ausnahmen als auch bestimmteHttpResponseCode
s behandelt werden. Sehen Sie das Beispiel in der Polly readme hierresponse.Content
null sein, wenn gerade eine Methode aufgerufen wurde?Ich verwende EnsureSuccessStatusCode, wenn ich die Ausnahme nicht mit derselben Methode behandeln möchte.
Die auf GetUserIdAsync ausgelöste Ausnahme wird auf DoSomethingAsync behandelt.
quelle