Ist es in Ordnung, ein "try/catch" in eine "using" -Anweisung für eine Web-Anfrage einzubetten? Ist mein Code korrekt? Das ist meine Anforderungen sind:C# - ist es ok, ein "try/catch" in eine "using" -Anweisung für eine Web-Anfrage einzubetten? Ist mein Code korrekt?
Möchten Sie die „mit“ Anweisung verwenden, dass Ressourcen zu machen, sind in jedem Fall freigegeben für HttpWebResponse
- Aber wollen noch einige benutzerdefinierten Dinge zu tun, wenn es eine ist Ausnahme für HttpWebResponse und "response = (HttpWebResponse) request.GetResponse();" bestimmtes.
Mein Quellcode:
var result = new HttpHeaderInfo();
HttpWebRequest request = null;
HttpWebResponse response = null;
using (response)
{
try
{
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "HEAD";
request.KeepAlive = false;
request.Timeout = Properties.Settings.Default.WebTimeoutDefault;
response = (HttpWebResponse)request.GetResponse();
result.LastModified = response.LastModified;
result.ContentType = response.ContentType;
result.StatusCode = response.StatusCode;
result.ContentLength = response.ContentLength;
}
catch (Exception ex)
{
if (ex is InvalidOperationException ||
ex is ProtocolViolationException ||
ex is WebException)
{
result.HttpError = ex;
result.LastModified = System.DateTime.MinValue;
result.ContentType = null;
}
else { throw; }
}
}
dank
danke - haben Sie bemerkt, dass ich nur 3 spezifische Ausnahmen in meinem Code erfasst habe - ich war mir nicht sicher, inwieweit InvalidOperationException und ProtocolViolationException cuold als Systemtypfehler behandelt wurden (unwahrscheinlich, wenn der Code ein Problem hat) - Glaubst du, dass es für HTTPWebRequest hier angebracht ist, WebException nur dann zu behandeln? – Greg
@Greg: Sie müssen wahrscheinlich die anderen Ausnahmen behandeln, ich wollte das Beispiel einfach nicht überladen. Um das zu tun, können Sie mehrere 'catch' Blöcke hinzufügen -" Moron's "Antwort zeigt ein Beispiel dafür. (Anmerkung - Ich würde wahrscheinlich "ProtocolViolationException", aber nicht "InvalidOperationException" abfangen - der erste kommt von letzterem und Sie sollten keinen anderen Typ von "InvalidOperationException" von "GetResponse" bekommen, nicht so weit ich weiß ...) – Aaronaught