使用HttpWebRequest时出现500内部服务器错误,如何才能获得真正的错误?

时间:2009-12-04 16:42:00

标签: http

我正在尝试改进为响应应用中处理的错误而提供的信息。

这是代码:

Try
        httpRequestObj = HttpWebRequest.Create(strRequest)
        httpRequestObj.Method = "GET"
        httpRequestObj.UseDefaultCredentials = True
*       httpResponse = httpRequestObj.GetResponse
        Using reader As StreamReader = New StreamReader(httpResponse.GetResponseStream())
            strXML = reader.ReadToEnd()
        End Using
    Catch ex As WebException
        'do something with ex
    End Try

在*行

上抛出webexception

目前我在Exception中看到的只是“远程服务器返回错误:(500)内部服务器错误”。我在调试中查看了异常,但我需要的信息不存在 - 我想应该读入响应以查看该信息,但它永远不会那么远。

如果我接收请求并将其直接粘贴到我的浏览器中,我可以看到从我正在调用的API返回的XML格式的错误详细信息,如下所示:

<Error>
  <description>info I want to get to here</description> 
  <detail /> 
  <code>info I want to get to here</code> 
  <source /> 
  <category>info I want to get to here</category> 
  <file>info I want to get to here</file> 
  <line>info I want to get to here</line> 
  <pad /> 
</Error>

有什么方法可以更改此代码,以便我可以通过500错误并查看实际响应,我希望能够解析此xml以找出失败的真正问题。

注意:Exception确实有一个ex.Response(System.Net.HttpWebResponse),但我看不到我需要的信息,只有一堆Header信息。

3 个答案:

答案 0 :(得分:17)

您可以从异常中获取错误响应....

try
{
....
} catch(Exception e) {
   if (e is WebException && ((WebException)e).Status==WebExceptionStatus.ProtocolError)
   {
      WebResponse errResp = ((WebException)e).Response;
      using(Stream respStream = errResp.GetResponseStream())
      {
         // read the error response
      }
   }
}

答案 1 :(得分:3)

        System.Net.WebResponse response = null;
        try
        {
            response = wreq.GetResponse();
        }
        catch (WebException e)
        {
            if (e.Status == WebExceptionStatus.ProtocolError)
            {
                string error = new System.IO.StreamReader(e.Response.GetResponseStream()).ReadToEnd();
            }
        }
        catch (Exception e)
        {
        }

就这么简单,您将在字符串错误中得到完整的响应。

答案 2 :(得分:2)

尝试使用Fiddler。它是调试代理,它将显示客户端和服务器之间的所有数据发送。您还可以查看所有标题和上下文。