这类似于此处提出的问题: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()
的尝试都会导致流不可读
异常。
这种在非 200 HTTP 状态响应中返回错误消息的方法在 Web API 中似乎很流行 - 我希望有一种方法可以获取这些响应...
最佳答案
您可能需要直接点击套接字连接才能获取响应 xml。
查看这个答案:https://stackoverflow.com/a/6755142
我在尝试实现亚马逊的 Off Amazon Payments API 时遇到了同样的事情。如果我传递无效的交易 ID,它们会返回 404 错误...这不是我所期望的。
还值得注意的是:我在发送 http post 时使用异步,并且此 404 在 BeginGetResponse 方法上抛出 WebException;尝试读取回调中的响应时不会。相反,在回调中读取响应流时会引发 400 Bad Request WebException。
关于c# - 使用 HttpWebRequest 从 404 错误中检索内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12911258/