Получение кода состояния Http (200, 301, 404 и т.д.) Из HttpWebRequest и HttpWebResponse
Я пытаюсь получить номер кода состояния HTTP из объекта HttpWebResponse
, возвращаемого с HttpWebRequest
. Я надеялся получить фактические цифры (200, 301, 302, 404 и т.д.), А не текстовое описание. ( "Ok", "MovedPermanently" и т.д.) Является ли число, захороненное в объекте где-то в объекте ответа? Любые идеи, кроме создания большой функции переключения? Благодарю.
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());
Ответы
Ответ 1
Console.Write((int)response.StatusCode);
HttpStatusCode (тип response.StatusCode
) - это перечисление, в котором значения элементов соответствуют кодам состояния HTTP, например
public enum HttpStatusCode
{
...
Moved = 301,
OK = 200,
Redirect = 302,
...
}
Ответ 2
Вы должны быть осторожны, ответы сервера в диапазоне 4xx и 5xx вызывают исключение WebException. Вам нужно поймать его, а затем получить код состояния из объекта WebException:
try
{
wResp = (HttpWebResponse)wReq.GetResponse();
wRespStatusCode = wResp.StatusCode;
}
catch (WebException we)
{
wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode;
}
Ответ 3
В соответствии с "dtb" вам нужно использовать HttpStatusCode, но после "zeldi" вам нужно быть особенно внимательным с ответами кодa >= 400.
Это сработало для меня:
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());
Ответ 4
//Response being your httpwebresponse
Dim str_StatusCode as String = CInt(Response.StatusCode)
Console.Writeline(str_StatusCode)