È corretto inserire un "try/catch" all'interno di un'istruzione "using" per una richiesta web? Il mio codice è corretto? Ecco le mie esigenze sono:C# - è corretto inserire un "try/catch" all'interno di un'istruzione "using" per una richiesta web? Il mio codice è corretto?
desidera utilizzare la "utilizzando" l'istruzione per assicurarsi che le risorse vengono rilasciati in ogni caso per HttpWebResponse
- Ma ancora voglia di fare alcune cose personalizzato se v'è un exception re HttpWebResponse e "response = (HttpWebResponse) request.GetResponse();" in particolare.
mio codice sorgente:
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; }
}
}
grazie
grazie - hai notato che stavo effettivamente catturando solo 3 specifiche eccezioni nel mio codice - non ero sicuro di quanto estendere InvalidOperationException e ProtocolViolationException cuold sono stati trattati come errori di tipo di sistema (improbabile che si verifichino a meno che il tuo codice non abbia un problema) - Pensi che per HTTPWebRequest qui sia appropriato gestire solo WebException? – Greg
@Greg: Probabilmente hai bisogno di gestire le altre eccezioni, semplicemente non volevo ingombrare l'esempio. Per farlo puoi aggiungere più blocchi 'catch' - la risposta di" Moron "mostra un esempio di come farlo. (Nota - Probabilmente prenderò "ProtocolViolationException" ma non "InvalidOperationException" - il primo deriva da quest'ultimo e non dovresti ottenere nessun altro tipo di "InvalidOperationException" da "GetResponse", non per quanto ne so comunque ...) – Aaronaught