Estoy tratando de verificar la existencia de una Url usando HttpWebRequest. He encontrado algunos ejemplos que hacen básicamente el siguiente:¿Por qué HttpWebRequest lanza una excepción en lugar de devolver HttpStatusCode.NotFound?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
Sin embargo, si la URL es de hecho roto, no es devolver una respuesta, que está en su lugar lanzar una excepción.
he modificado mi código para esto:
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;
}
que parece finalmente hacer lo que quiero.
Pero me gustaría saber por qué la solicitud arroja una excepción en lugar de devolver la respuesta con un código de estado NotFound.
Si bien este es el trabajo mínimo para guardar código utilizando HttpWebRequest/Response de esta opción de diseño incorrecto en la parte de autores de .Net Framework, la solución correcta es usar HttpClient, que no aplica códigos de estado 4xx y 5xx. Las excepciones están pensadas para situaciones excepcionales, y lanzar solo para atraparlo y proceder como si todo estuviera bien, es feo y malo para el rendimiento, especialmente dado que hay una mejor opción que lo evita por completo. https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx –
esto no parece ser cierto; Estoy usando HttpClient en un proyecto y cuando se llama a una url que no existe y que devuelve un código de estado 404, el cliente lanza una excepción en lugar de devolver una respuesta con el código de estado 404. ¿Hay algún paso adicional en el uso de httpclient para evitar esto? – SelAromDotNet