500内部服务器错误使用HttpWebRequest时,我如何才能找到真正的错误?

500内部服务器错误使用HttpWebRequest时,我如何才能找到真正的错误?,http,Http,我正在尝试改进为响应应用程序中处理的错误而提供的信息 代码如下: Try httpRequestObj = HttpWebRequest.Create(strRequest) httpRequestObj.Method = "GET" httpRequestObj.UseDefaultCredentials = True * httpResponse = httpRequestObj.GetResponse Using

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

代码如下:

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在*行上抛出

目前,我在异常中看到的只是“远程服务器返回错误:(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以找出失败的真正问题


注意:异常确实有一个ex.响应(System.Net.HttpWebResponse),但我在其中看不到我需要的信息,只有一堆标题信息。

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

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

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
      }
   }
}

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

@DannykPowell:这是web开发人员必须具备的。或者只是chrome开发人员工具:)网络选项卡也有同样的功能,它的干扰消息选项较少,但它干净、正确的过滤功能已经准备就绪:)现在看看这个。这段代码遇到的第一个问题是,“ResponseError”似乎不是WebExceptionStatus枚举的一部分,尽管如此,它仍将此标记为正确,因为这个答案确实帮助我找到了解决方案。我的代码(vb.net)看起来像:Catch ex As WebException Using reader As StreamReader=newstreamreader(ex.Response.GetResponseStream())strXML=reader.ReadToEnd()End Using抱歉,它实际上应该是WebExceptionStatus.ProtocolError。在这种情况下,响应对象应该具有错误流。现在,尽管如此,如果您的错误流是空的,那么这可能意味着服务器没有发送任何东西,或者某个地方有错误。你能用它来做追踪记录吗?这将显示服务器是否发送了响应实体。+1捕获实际的WebException比捕获一般异常要好,否则您实际上忽略了所有其他异常。
        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)
        {
        }