HttpWebRequest接受500内部服务器错误

17

这是我的代码:

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

WebResponse wr = req.GetResponse();
当服务器返回500内部服务器错误时,在req.GetResponse()中会抛出异常。 我希望GetResponse()能够接受此响应代码,因为传递的url抛出此响应代码是正常的。尽管响应代码是500内部服务器错误,但我仍希望解析Html。是否可以告诉GetResponse()方法不要验证响应代码?

你的问题对我来说毫无意义。当HttpWebRequest.GetResponse()接收到500响应代码时,它并没有做什么特别的事情。你可以自由解析收到的HTML。 - Keith Payne
你应该使用新的HttpClient类。 - glautrou
我已经编辑了你的标题。请参考“问题的标题应该包含“标签”吗?”,共识是“不应该包含”。 - John Saunders
嗨@KeithPayne,如果响应状态为500且无法读取内容,则GetResponse会抛出异常。我刚刚尝试了应用修复程序,它解决了我的问题。 - Daniel Hillebrand
2个回答

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

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

它允许调用代码从服务器的响应流中读取内容,如果没有try和catch块,这将是不可能的。 - War
3
如果你把WebResponse wr = null;放在try外面,那么在catch中你可以检查wr是否为null,如果不是则读取响应状态。 - War

3
我用以下代码解决了这个问题:

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();
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接