Gibt es eine einfache Möglichkeit, den HTTP-Statuscode von a System.Net.WebException
abzurufen?
c#
http-status-codes
webexception
Gilsham
quelle
quelle
Mit dem nullbedingten Operator (
?.
) können Sie den HTTP-Statuscode mit einer einzigen Codezeile abrufen:Die Variable
status
enthält dieHttpStatusCode
. Wenn ein allgemeinerer Fehler wie ein Netzwerkfehler auftritt, bei dem niemals ein HTTP-Statuscode gesendetstatus
wird, ist dieser Wert null. In diesem Fall können Sie überprüfenex.Status
, um die zu erhaltenWebExceptionStatus
.Wenn Sie nur möchten, dass eine beschreibende Zeichenfolge im Falle eines Fehlers protokolliert wird, können Sie den Null-Coalescing-Operator (
??
) verwenden, um den entsprechenden Fehler abzurufen:Wenn die Ausnahme aufgrund eines 404-HTTP-Statuscodes ausgelöst wird, enthält die Zeichenfolge "NotFound". Wenn der Server hingegen offline ist, enthält die Zeichenfolge "ConnectFailure" usw.
quelle
?.
Operator während der Vorschau-Freigabe ursprünglich als Null-Propagierungsoperator oder als Null-Bedingungsoperator bezeichnet wurde. Atlassian resharper warnt jedoch davor, in solchen Szenarien den Null-Propagierungsoperator zu verwenden. Gut zu wissen, dass es auch als nullbedingter Operator bezeichnet wird.Dies funktioniert nur, wenn WebResponse eine HttpWebResponse ist.
quelle
(Mir ist klar, dass die Frage alt ist, aber sie gehört zu den Top-Hits bei Google.)
Eine häufige Situation, in der Sie den Antwortcode wissen möchten, ist die Ausnahmebehandlung. Ab C # 7 können Sie den Mustervergleich verwenden, um die catch-Klausel nur dann einzugeben, wenn die Ausnahme mit Ihrem Prädikat übereinstimmt:
Dies kann leicht auf weitere Ebenen erweitert werden, wie in diesem Fall, in dem dies
WebException
tatsächlich die innere Ausnahme eines anderen war (und wir nur daran interessiert sind404
):Zum Schluss: Beachten Sie, dass die Ausnahme in der catch-Klausel nicht erneut ausgelöst werden muss, wenn sie nicht Ihren Kriterien entspricht, da wir die Klausel mit der obigen Lösung erst gar nicht eingeben.
quelle
Sie können diesen Code ausprobieren, um HTTP-Statuscode von WebException abzurufen. Es funktioniert auch in Silverlight, da in SL WebExceptionStatus.ProtocolError nicht definiert ist.
quelle
return 0
? oder besserHttpStatusCode?
( nullbar )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
Ich bin mir nicht sicher, ob es eine gibt, aber wenn es eine solche Eigenschaft gäbe, würde sie nicht als zuverlässig angesehen werden. A
WebException
kann aus anderen Gründen als HTTP-Fehlercodes einschließlich einfacher Netzwerkfehler ausgelöst werden. Diese haben keinen solchen passenden http-Fehlercode.Können Sie uns etwas mehr Informationen darüber geben, was Sie mit diesem Code erreichen möchten? Möglicherweise gibt es einen besseren Weg, um die benötigten Informationen zu erhalten.
quelle