Ich habe folgenden Code:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Credentials = MyCredentialCache;
try
{
request.GetResponse();
}
catch
{
}
Wie kann ich einen bestimmten 404-Fehler abfangen? Der WebExceptionStatus.ProtocolError kann nur erkennen, dass ein Fehler aufgetreten ist, gibt jedoch nicht den genauen Code des Fehlers an.
Beispielsweise:
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw ex;
}
}
Ist einfach nicht nützlich genug ... die Protokollausnahme könnte 401, 503, 403 sein, eigentlich alles.
System.Exception
und hängen Sie nicht vom Ausnahmetext in Ihrem Handler ab!throw ex
, Sie generieren eine neue Ausnahme mit einem leeren Aufrufstapel. Einfach benutzenthrow
.WebRequest
Antworten:
Verwenden Sie die
HttpStatusCode Enumeration
, speziellHttpStatusCode.NotFound
Etwas wie:
Wo
we
ist einWebException
.quelle
we.Response
nicht der Fall istHttpWebResponse
. Wenn der Code davon ausgehen möchte, dass er immer diesen Typ hat, sollte er einfach Folgendes umwandeln :HttpWebResponse errorResponse = (HttpWebResponse)we.Response;
. Dies wird eine explizite,InvalidCastException
wenn das Unmögliche passiert, anstelle einer mysteriösen werfenNullReferenceException
.An object reference is required for the non-static field, method, or property 'WebException.Response'
benutze diesen Code.quelle
throw
(Umwerfen) am Ende von dir gebencatch
, sonst wird dies nur stillschweigend jede andere Art von essenWebException
.WebRequest
nicht implementiertIDisposable
.In C # 6 können Sie Ausnahmefilter verwenden .
quelle
Ich habe das nicht getestet, aber es sollte funktionieren
quelle
catch
Block kopieren / einfügen , da ich beim Versuch genau den gleichen Code hatte wie das OP. Sie sollten diese Frage dann aufgrund des OP-Codes wirklich ganz ablehnen.Ich denke, wenn Sie eine WebException abfangen, gibt es dort einige Informationen, anhand derer Sie feststellen können, ob es sich um eine 404 handelt. Nur so kenne ich sie derzeit ... Ich wäre daran interessiert, andere zu kennen ...
quelle
Schauen Sie sich diesen Snipit an. Die GetResponse löst eine WebRequestException aus. Wenn Sie das abfangen, erhalten Sie den Statuscode aus der Antwort.
Dies kam von http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx
quelle
Fangen Sie den richtigen Ausnahmetyp ab
WebException
:quelle
e.Response
wieHttpWebResponse
vorher besetzen, um Zugang zum zu bekommenStatusCode
.Informationen zum Status der Antwort finden Sie bei MSDN :
quelle
Ich glaube, für VB.NET-Leute, die dies durchsuchen, können wir die Ausnahme nur dann abfangen, wenn es sich wirklich um eine 404 handelt.
quelle
Wenn POST- oder GET-Daten mithilfe der WebRequest-Klasse an den Server gesendet werden, lautet der Ausnahmetyp WebException. Nachfolgend finden Sie den Code für die Ausnahme "Datei nicht gefunden"
quelle