Sto provando a verificare l'esistenza di un URL utilizzando HttpWebRequest. Ho trovato alcuni esempi che fanno fondamentalmente questo:Perché HttpWebRequest lancia un'eccezione invece di restituire HttpStatusCode.NotFound?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
Tuttavia, se l'URL è infatti rotto, non è il ritorno di una risposta, è invece un'eccezione.
ho modificato il mio codice a questo:
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
}
catch (System.Net.WebException ex)
{
var response = ex.Response as HttpWebResponse;
return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}
che sembra fare finalmente quello che voglio.
Ma mi piacerebbe sapere, perché la richiesta genera un'eccezione invece di restituire la risposta con un codice di stato NotFound?
Sebbene questo sia il minimo lavoro per salvare il codice usando HttpWebRequest/Response da questa cattiva scelta di progettazione nella parte degli autori di .Net Framework, la soluzione corretta è usare HttpClient, che non gira sui codici di stato 4xx e 5xx. Le eccezioni sono pensate per situazioni eccezionali, e si lanciano solo per prenderlo e procedere come se andasse bene come questo è brutto e cattivo per le prestazioni, soprattutto dato che c'è un'opzione migliore che la evita del tutto. https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx –
questo non sembra essere vero; Sto usando HttpClient in un progetto e quando si chiama un url che non esiste che restituisce un codice di stato 404, il client lancia un'eccezione invece di restituire una risposta con il codice di stato 404. c'è un ulteriore passaggio nell'uso di httpclient per impedirlo? – SelAromDotNet