statuscode para pagina estado codigos codes code c# .net http

para - response.statuscode c#



.NET: verifique el código de estado de respuesta de la URL? (5)

Aquí está lo que se me ocurrió que maneja 404 excepciones. También hay una prueba a continuación.

public static HttpStatusCode GetUrlStatus(string url, string userAgent) { HttpStatusCode result = default(HttpStatusCode); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.UserAgent = userAgent; request.Method = "HEAD"; try { using (var response = request.GetResponse() as HttpWebResponse) { if (response != null) { result = response.StatusCode; response.Close(); } } } catch (WebException we) { result = ((HttpWebResponse)we.Response).StatusCode; } return result; } [Test] public void PageNotFoundShouldReturn404() { //Arrange HttpStatusCode expected = HttpStatusCode.NotFound; string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"; //Act HttpStatusCode result = WebHelper.GetUrlStatus("http://www.kellermansoftware.com/SomePageThatDoesNotExist", userAgent); //Assert Assert.AreEqual(expected, result); }

¿Cuál es la forma más fácil en .NET de verificar qué código de estado responde un servidor web a una solicitud GET?

Tenga en cuenta que no necesito el cuerpo de la respuesta. De hecho, si es posible, solo se debe solicitar el encabezado. Sin embargo, dicho esto, si solicitar que se omita el cuerpo de la respuesta aumenta significativamente la complejidad del código, recibir el cuerpo estaría bien.

Además, estoy particularmente interesado en detectar TODAS las excepciones apropiadas posibles (System.Net.WebException, System.IO.IOException, System.Net.Sockets.SocketException, etc.), ya que esta rutina se ejecutará miles de veces al día.


Si usas HttpWebRequest, es bastante fácil:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://url"); request.Method = "GET"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); HttpStatusCode status = response.StatusCode;

Puede rodear eso con una cláusula de captura general, o mirar los documentos para WebRequest.Create y .GetResponse para ver qué excepciones se lanzarán.


Terminé con este método que combina la respuesta de Ivan Ferić y con el apoyo adecuado de casos excepcionales:

public async Task<bool> IsAccessibleAsync (string url) { if (url == null) throw new ArgumentNullException ("url"); if (url.IndexOf ('':'') < 0) url = "http://" + url.TrimStart (''/''); if (!Uri.IsWellFormedUriString (url, UriKind.Absolute)) return false; var request = (HttpWebRequest) WebRequest.Create (url); request.Method = "HEAD"; try { using (var response = await request.GetResponseAsync () as HttpWebResponse) { if (response != null && response.StatusCode == HttpStatusCode.OK) return true; return false; } } catch (WebException) { return false; } }


Use el método HTTP HEAD , que es el mismo que GET excepto que no devuelve el cuerpo:

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com"); request.Method = "HEAD"; var response = (HttpWebResponse)request.GetResponse(); // status code... response.StatusCode;

De la Sección 9.4 de RFC2616 :

El método HEAD es idéntico al GET, excepto que el servidor NO DEBE devolver un cuerpo de mensaje en la respuesta. La metainformación contenida en los encabezados HTTP en respuesta a una solicitud HEAD DEBE ser idéntica a la información enviada en respuesta a una solicitud GET. Este método puede usarse para obtener información sobre la entidad implícita en la solicitud sin transferir el propio cuerpo de la entidad. Este método se usa a menudo para probar la validez de los enlaces de hipertexto, la accesibilidad y las modificaciones recientes.


public HttpStatusCode GetHeaders(string url) { HttpStatusCode result = default(HttpStatusCode); var request = HttpWebRequest.Create(url); request.Method = "HEAD"; using (var response = request.GetResponse() as HttpWebResponse) { if (response != null) { result = response.StatusCode; response.Close(); } } return result; }