Obtener el número de código de estado HTTP (200, 301, 404, etc.) de HttpWebRequest y HttpWebResponse

Estoy tratando de obtener el número de código de estado HTTP del objeto HttpWebResponse devuelto por HttpWebRequest . Esperaba obtener los números reales (200, 301, 302, 404, etc.) en lugar de la descripción del texto. (“Ok”, “MovedPermanently”, etc.) ¿Está enterrado el número en una propiedad en algún lugar del objeto de respuesta? ¿Alguna otra idea que no sea crear una gran función de cambio? Gracias.

 HttpWebRequest webRequest = (HttpWebRequest)WebRequest .Create("http://www.gooogle.com/"); webRequest.AllowAutoRedirect = false; HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); //Returns "MovedPermanently", not 301 which is what I want. Console.Write(response.StatusCode.ToString()); 

 Console.Write((int)response.StatusCode); 

HttpStatusCode (el tipo de response.StatusCode ) es una enumeración en la que los valores de los miembros coinciden con los códigos de estado HTTP, p. Ej.

 public enum HttpStatusCode { ... Moved = 301, OK = 200, Redirect = 302, ... } 

Debe tener cuidado, las respuestas del servidor en el rango de 4xx y 5xx lanzan una WebException. Debes atraparlo y luego obtener el código de estado de un objeto WebException:

 try { wResp = (HttpWebResponse)wReq.GetResponse(); wRespStatusCode = wResp.StatusCode; } catch (WebException we) { wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode; } 

Según ‘dtb’ necesita usar HttpStatusCode, pero después de ‘zeldi’ debe tener mucho cuidado con las respuestas de código> = 400.

Esto me ha funcionado:

 HttpWebResponse response = null; HttpStatusCode statusCode; try { response = (HttpWebResponse)request.GetResponse(); } catch (WebException we) { response = (HttpWebResponse)we.Response; } statusCode = response.StatusCode; Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); sResponse = reader.ReadToEnd(); Console.WriteLine(sResponse); Console.WriteLine("Response Code: " + (int)statusCode + " - " + statusCode.ToString()); 

Simplemente StatusCode el StatusCode a int .

 var statusNumber; try { response = (HttpWebResponse)request.GetResponse(); // This will have statii from 200 to 30x statusNumber = (int)response.StatusCode; } catch (WebException we) { // Statii 400 to 50x will be here statusNumber = (int)we.Response.StatusCode; } 
 //Response being your httpwebresponse Dim str_StatusCode as String = CInt(Response.StatusCode) Console.Writeline(str_StatusCode)