HttpRequestException vs WebException

9

Dies ist eine allgemeine Frage, über die ich verwirrt bin. Ich dachte, sobald eine REST-Anfrage gemacht wurde, würde ein Fehler über ein WebException zurückkommen. In einem Fall habe ich eine HttpRequestException , die mir nicht erlaubt, den HTTP-Statuscode zu bekommen.

Ich bin neu in diesem Zeug, aber was ist der Unterschied zwischen diesen? Warum gibt es zwei Arten? Wann wird man im Gegensatz zu anderen benutzt?

WebException scheint gut zu funktionieren. HttpRequestException scheint eine sehr schwache Version davon zu sein, wo es den Statuscode (in seiner Nachricht) kennt, aber es wird mir nicht explizit sagen, was es war.

BEARBEITEN: Ich benutze HttpClient . Aufruf von client.GetStreamAsync() .

    
user3063281 13.03.2014, 14:50
quelle

2 Antworten

10

Es gibt drei verschiedene Fehlerszenarien:

a) Sie konnten keine Verbindung zum Server oder Proxy herstellen. In diesem Fall wird eine HttpRequestException ausgelöst. Seien Sie sich bewusst, wenn Ihr Server ausgefallen ist und Sie fiddler ausführen, Sie werden diese Ausnahme nie sehen, Sie werden einen 5XX Statuscode bekommen.

b) Beim Lesen / Schreiben eines Netzwerkstreams gibt es eine Art von Unterbrechung, bei der Sie eine IOException erhalten.

c) Sie erhalten eine Antwort mit einem HttpStatusCode mit einem 4XX / 5XX Statuscode zurück. Wenn Ihre Clientanwendung response.EnsureSuccessStatusCode () aufruft, wird eine HttpRequestException ausgelöst.

Wenn Sie sich entscheiden, EnsizeSuccessStatusCode aufzurufen, treffen Sie eine explizite Entscheidung, dass Sie keine anderen Statuscodes als die Tatsache, dass es erfolgreich / fehlgeschlagen ist, interessieren.

Wenn Sie wirklich eine Exception aufblasen und später den Statuscode verarbeiten müssen, schlage ich vor, dass Sie Ihre eigene Erweiterungsmethode erstellen, um EnsureSuccessStatusCode zu ersetzen und eine eigene Exception zu erstellen, die den Statuscode speichern kann. Oder wandeln Sie den Statuscode vorzugsweise in eine der wenigen Ausnahmen um, die auf den Korrekturmaßnahmen basieren, die Sie ergreifen möchten.

    
Darrel Miller 24.03.2014 13:56
quelle
1
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ qstntxt ___

Dies ist eine allgemeine Frage, über die ich verwirrt bin. Ich dachte, sobald eine REST-Anfrage gemacht wurde, würde ein Fehler über ein %code% zurückkommen. In einem Fall habe ich eine %code% , die mir nicht erlaubt, den HTTP-Statuscode zu bekommen.

Ich bin neu in diesem Zeug, aber was ist der Unterschied zwischen diesen? Warum gibt es zwei Arten? Wann wird man im Gegensatz zu anderen benutzt?

%code% scheint gut zu funktionieren. %code% scheint eine sehr schwache Version davon zu sein, wo es den Statuscode (in seiner Nachricht) kennt, aber es wird mir nicht explizit sagen, was es war.

BEARBEITEN: Ich benutze %code% . Aufruf von %code% .

    
___ tag123dotnethttpclient ___ Bezieht sich auf die System.Net.Http.HttpClient-Bibliothek, die Teil des HttpClient-Pakets in NuGet oder der .NET 4.5-Bibliothek ist. ___ tag123rest ___ REST (Representational State Transfer) ist eine Art von Softwarearchitektur für verteilte Hypermedia-Systeme wie das World Wide Web. Es hat im Vergleich zu RPC-Architekturen wie SOAP aufgrund der intrinsischen Entkopplung von Client von Server, die von einer einheitlichen Schnittstelle zwischen heterogenen Systemen herrührt, an Popularität gewonnen. ___ antwort22382549 ___

WebException-Klasse : Die Ausnahme das wird ausgelöst, wenn beim Zugriff auf das Netzwerk über ein Pluggable-Protokoll ein Fehler auftritt.

HttpRequestException-Klasse : Eine Basisklasse für Ausnahmen, die von den Klassen HttpClient und HttpMessageHandler ausgelöst werden.

Ich denke, die innere Ausnahme einer HttpRequestException könnte eine WebException sein, aber ich bin mir nicht sicher, ob es jemals ist.

Beachten Sie, dass eine 404, 302 oder eine andere Antwort als 200 (OK) nicht eine Ausnahme ist. Diese Antworten sind perfekt gültige HTTP-Antworten.

    
___ tag123webexception ___ hilf uns dieses Wiki zu bearbeiten ___ answer22611469 ___

Es gibt drei verschiedene Fehlerszenarien:

a) Sie konnten keine Verbindung zum Server oder Proxy herstellen. In diesem Fall wird eine HttpRequestException ausgelöst. Seien Sie sich bewusst, wenn Ihr Server ausgefallen ist und Sie fiddler ausführen, Sie werden diese Ausnahme nie sehen, Sie werden einen 5XX Statuscode bekommen.

b) Beim Lesen / Schreiben eines Netzwerkstreams gibt es eine Art von Unterbrechung, bei der Sie eine IOException erhalten.

c) Sie erhalten eine Antwort mit einem HttpStatusCode mit einem 4XX / 5XX Statuscode zurück. Wenn Ihre Clientanwendung response.EnsureSuccessStatusCode () aufruft, wird eine HttpRequestException ausgelöst.

Wenn Sie sich entscheiden, EnsizeSuccessStatusCode aufzurufen, treffen Sie eine explizite Entscheidung, dass Sie keine anderen Statuscodes als die Tatsache, dass es erfolgreich / fehlgeschlagen ist, interessieren.

Wenn Sie wirklich eine Exception aufblasen und später den Statuscode verarbeiten müssen, schlage ich vor, dass Sie Ihre eigene Erweiterungsmethode erstellen, um EnsureSuccessStatusCode zu ersetzen und eine eigene Exception zu erstellen, die den Statuscode speichern kann. Oder wandeln Sie den Statuscode vorzugsweise in eine der wenigen Ausnahmen um, die auf den Korrekturmaßnahmen basieren, die Sie ergreifen möchten.

    
___ qstnhdr ___ HttpRequestException vs WebException ___
Rick 13.03.2014 14:57
quelle