web-dev-qa-db-fra.com

Obtention du numéro de code d'état HTTP (200, 301, 404, etc.) à partir de HttpWebRequest et HttpWebResponse

J'essaie d'obtenir le numéro de code d'état HTTP de l'objet HttpWebResponse renvoyé d'un objet HttpWebRequest. J'espérais obtenir les chiffres réels (200, 301, 302, 404, etc.) plutôt que la description textuelle. ("Ok", "Déplacé en permanence", etc.) Le numéro est-il enterré dans une propriété quelque part dans l'objet de réponse? Des idées autres que la création d'une grande fonction de commutation? Merci.

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());
269
James Lawruk
Console.Write((int)response.StatusCode);

HttpStatusCode (le type de response.StatusCode) est une énumération dans laquelle les valeurs des membres correspondent aux codes de statut HTTP, par exemple.

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

Vous devez faire attention, les réponses du serveur dans la plage 4xx et 5xx lèvent une exception WebException. Vous devez l'attraper, puis obtenir le code d'état d'un objet WebException:

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

Comme pour "dtb", vous devez utiliser HttpStatusCode, mais après "zeldi", vous devez faire très attention aux réponses de code> = 400.

Cela a fonctionné pour moi:

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());
16
Wojciech Jakubas

Il suffit de contraindre la StatusCode à 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;
}
9
Marc
//Response being your httpwebresponse
Dim str_StatusCode as String = CInt(Response.StatusCode)
Console.Writeline(str_StatusCode)
3
prestigious