使用HttpWebRequest从404错误中检索内容

时间:2012-10-16 09:11:34

标签: c# .net api httpwebrequest linkedin

这类似于此处提出的问题:httpWebRequest - get error content 但我希望提供更多信息,希望得到答案。

我正在使用C#与LinkedIn API集成。当我对API进行无效调用时,它可以返回类似的HTTP响应(来自Fiddler):

HTTP/1.1 404 Not Found
Server: Apache-Coyote/1.1
x-li-request-id: VL2EER2ROJ
Date: Tue, 16 Oct 2012 08:52:59 GMT
Vary: *
x-li-format: xml
Content-Type: text/xml;charset=UTF-8
Content-Length: 266

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<error>
  <status>404</status>
  <timestamp>1350377580000</timestamp>
  <request-id>VL2EER2ROJ</request-id>
  <error-code>0</error-code>
  <message>Could not find member {/people/XXXXXX}</message>
</error>

我特别想得到错误xml,但HttpWebRequest似乎只是抛出异常,然后与内容无关。在我的调试器中,我可以看到内容长度为266,但任何调用(System.Net.WebException).Response.GetResponseStream()的尝试都会导致stream was not readable异常。

这种在非200 HTTP状态响应中返回错误消息的方法在Web API中似乎很流行 - 我希望有一种方法可以获得这些响应......

1 个答案:

答案 0 :(得分:2)

您可能需要直接点击套接字连接以获取响应xml。

请参阅此答案:https://stackoverflow.com/a/6755142

我在尝试实施亚马逊的Off Amazon Payments API时遇到了同样的问题。如果我传递了无效的交易ID,则会返回404错误...而不是我所期待的。

另外值得注意的是:我在发送http帖子时使用async,这个404会在BeginGetResponse方法上抛出WebException;而不是在尝试读取回调中的响应时。相反,在回调中读取响应流时会引发400 Bad Request WebException。