Uzyskanie numeru kodu statusu Http (200, 301, 404, itd.) z HttpWebRequest i HttpWebResponse

Próbuję uzyskać numer kodu statusu HTTP z obiektu HttpWebResponse zwróconego z HttpWebRequest. Miałem nadzieję uzyskać rzeczywiste liczby (200, 301,302, 404, itp.) zamiast opisu tekstowego. ("Ok"," MovedPermanently", itp.) Czy numer jest zakopany w nieruchomości gdzieś w obiekcie odpowiedzi? Jakieś inne pomysły niż stworzenie funkcji dużego przełącznika? Dzięki.

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());
Author: SteveC, 2009-08-26

5 answers

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

HttpStatusCode (typ response.StatusCode) jest wyliczaniem, w którym wartości członków odpowiadają kodom statusu HTTP, np.

public enum HttpStatusCode
{
    ...
    Moved = 301,
    OK = 200,
    Redirect = 302,
    ...
}
 325
Author: dtb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 20:41:46

Musisz być ostrożny, odpowiedzi serwera w zakresie 4xx i 5xx rzucają WebException. Musisz go złapać, a następnie pobrać kod stanu z obiektu WebException:

try
{
    wResp = (HttpWebResponse)wReq.GetResponse();
    wRespStatusCode = wResp.StatusCode;
}
catch (WebException we)
{
    wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode;
}
 222
Author: zeldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-15 14:48:27

Zgodnie z "dtb" musisz użyć HttpStatusCode, ale podążając za "zeldi" musisz być bardzo ostrożny z odpowiedziami na kod >= 400.

To mi się udało:

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());
 10
Author: Wojciech Jakubas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 14:11:41

Po prostu wymusić StatusCode na 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;
}
 5
Author: Marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 07:57:00
//Response being your httpwebresponse
Dim str_StatusCode as String = CInt(Response.StatusCode)
Console.Writeline(str_StatusCode)
 0
Author: prestigious,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 17:09:42