web-dev-qa-db-fra.com

HttpWebRequest accepte 500 Erreur de serveur interne

Ceci est mon code:

HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;

WebResponse wr = req.GetResponse();

Lorsque le serveur renvoie 500 Internal Server Error, une exception est renvoyée dans req.GetResponse (). J'aimerais que GetResponse () accepte ce code de réponse, il est normal que l'URL transmise lève ce code de réponse. Je voudrais analyser le code HTML malgré l'erreur de serveur interne du code de réponse 500. Est-il possible de dire à la méthode GetResponse () de ne pas vérifier le code de réponse?

12
Darxis
try
{
    HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;

    WebResponse wr = req.GetResponse();
}
catch (WebException wex)
{
    var pageContent = new StreamReader(wex.Response.GetResponseStream())
                          .ReadToEnd();
}
39
I4V

J'ai résolu avec ce code:

class Program
{
    static void Main(string[] args)
    {
        var soap = @"<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tem=""http://tempuri.org/""><s:Body><GetData xmlns = ""http://tempuri.org/""><value>2</value></GetData></s:Body></s:Envelope>";

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"http://localhost:51148/Service1.svc");

        req.Headers.Add($"SOAPAction", "http://tempuri.org/IService1/GetData");
        req.ContentType = "text/xml;charset=\"utf-8\"";

        byte[] data = System.Text.Encoding.UTF8.GetBytes(soap);
        req.ContentLength = data.Length;

        req.Accept = "text/xml";
        req.Method = "POST";

        Stream stm = req.GetRequestStream();
        stm.Write(data, 0, data.Length);

        try
        {

            WebResponse response = req.GetResponse();
            Stream responseStream = response.GetResponseStream();
        }
        catch (WebException webex)
        {
            WebResponse errResp = webex.Response;
            using (Stream respStream = errResp.GetResponseStream())
            {
                StreamReader reader = new StreamReader(respStream);
                string text = reader.ReadToEnd();
            }
        }
    }
}