it-swarm.com.de

Abrufen der HTTP-Status-Codenummer (200, 301, 404 usw.) von HttpWebRequest und HttpWebResponse

Ich versuche, die HTTP-Statuscodenummer aus dem HttpWebResponse -Objekt abzurufen, das von einem HttpWebRequest zurückgegeben wurde. Ich hatte gehofft, die tatsächlichen Zahlen (200, 301, 302, 404 usw.) anstatt der Textbeschreibung zu erhalten. ("Ok", "MovedPermanently" usw.) Ist die Nummer in einer Eigenschaft irgendwo im Antwortobjekt vergraben? Irgendwelche anderen Ideen als die Schaffung einer großen Schalterfunktion? Vielen Dank.

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 (der Typ von response.StatusCode) ist eine Aufzählung, bei der die Werte der Mitglieder mit den HTTP-Statuscodes übereinstimmen, z.

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

Sie müssen vorsichtig sein, Serverantworten im Bereich von 4xx und 5xx lösen eine WebException aus. Sie müssen es abfangen und dann den Statuscode von einem WebException-Objekt abrufen:

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

Gemäß 'dtb' müssen Sie HttpStatusCode verwenden, aber nach 'zeldi' müssen Sie bei Code-Antworten> = 400 besonders vorsichtig sein.

Das hat bei mir geklappt:

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

Setzen Sie einfach StatusCode auf 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