3

Ich habe eine Anwendung, die manchmal einige Anforderungen an den Server stellen muss, um zu sehen, dass diese Anfragen ordnungsgemäß blockiert sind. Mit anderen Worten, die erwartete Serverantwort ist 403 verboten.Wie vermeidet man WebException for 403 Verbotene Antwort?

Mit einem Stück Code wie folgt:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(protectedPage); 
httpRequest.Method = WebRequestMethods.Http.Head; 
WebResponse response = HttpRequest.GetResponse(); 

ein WebException in der letzten Zeile geworfen wird.

Beim Profiling-Code hat diese Ausnahme in einem try/catch-Block Auswirkungen auf die Leistung, die ich vermeiden möchte.

Gibt es eine Möglichkeit, die Antwort des Servers zu prüfen, indem eine 403 erwartet wird, ohne eine Ausnahme abfangen zu müssen (aber die direkte Verwendung von Sockets zu vermeiden)?

+0

Ich sehe nicht, wie das Einfangen dieser Ausnahme die Leistung überhaupt beeinträchtigen würde. Ich meine, es braucht nichts im Vergleich zu dem, wie lange es dauert, eine Webseite zu erhalten. – Will

Antwort

3

Leider ist dies ein vexing exception im Framework, und es gibt keine Möglichkeit, es zu vermeiden (während immer noch die HttpWebRequest Klasse verwenden). Aber, wie High darauf hingewiesen hat, wird diese Ausnahmebehandlung Nanosekunden dauern, während die Web-Anfrage selbst (bestenfalls) Millisekunden dauern wird, also mach dir keine Sorgen darüber.

Das WebException Objekt verfügt über eine Response Eigenschaft, die die Antwort enthält; Wenn Sie mit der Ausnahme umgehen, müssen Sie das Objekt WebResponse entsorgen (um undichte Verbindungen zu vermeiden).

+0

+1 für die Förderung der Ausnahmekategorisierung von Eric Lippert – Tergiver

+0

@Tergiver, ich denke, das ist eine Situation, in der die ärgerliche Ausnahme eines Anwendungsfalls die exogene Ausnahme eines anderen Anwendungsfalls ist. 'File.Open' löst aus, wenn Sie keine Berechtigung zum Lesen der Datei haben,' HttpWebRequest' macht das analoge hier. –

2

Was bei der Profilerstellung Zeit in Anspruch nimmt, ist wahrscheinlich nicht die Ausnahme, sondern die tatsächliche Antwort von der Website.

Die WebException.Status-Eigenschaft gibt Ihnen den Statuscode für die HTTP-Antwort, und Sie können darauf basierend weitere Verarbeitung vornehmen.

+1

WebException.Status zeigt nur einen Protokollfehler an. Es gibt keinen Statuscode. –

+1

Sie müssen die Ausnahme excepten.Response auf 'HttpWebResponse' und überprüfen Sie die' response.StatusCode' Eigenschaft. –

+1

Danke, ((HttpWebResponse) (we.Response)). StatusCode gibt den Wert wie Sie sagten. –

Verwandte Themen