httpresponsemessage from error codes code c# asp.net httpwebrequest http-status-code-404

from - http status code c# to int



¿Por qué HttpWebRequest lanza una excepción en lugar de devolver HttpStatusCode.NotFound? (2)

Esto puede ser bastante molesto cuando las páginas web utilizan mucho los códigos de estado y no todos son errores. Lo cual puede hacer que el procesamiento del cuerpo sea bastante doloroso. Personalmente utilizo este método de extensión para obtener la respuesta.

public static class HttpWebResponseExt { public static HttpWebResponse GetResponseNoException(this HttpWebRequest req) { try { return (HttpWebResponse)req.GetResponse(); } catch (WebException we) { var resp = we.Response as HttpWebResponse; if (resp == null) throw; return resp; } } }

Estoy tratando de verificar la existencia de una URL usando HttpWebRequest. Encontré algunos ejemplos que básicamente hacen esto:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); request.Method = "HEAD"; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { return response.StatusCode; }

Sin embargo, si la url está rota, no está respondiendo, sino que lanza una excepción.

Modifiqué mi código a 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?


Por qué no? Ambas son opciones de diseño válidas, y HttpWebRequest fue diseñado para funcionar de esta manera.