【发布时间】:2012-10-16 09:11:33
【问题描述】:
这类似于此处提出的问题:httpWebRequest - get error content 但我希望提供更多信息以期得到答案。
我正在使用 C# 与 LinkedIn API 集成。当我对 API 进行 invalid 调用时,它可以返回类似这样的 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 中似乎很流行 - 我希望有一种方法可以获取这些响应...
【问题讨论】:
-
这是什么版本的 .NET?这听起来像一个错误。获取 system.net 跟踪日志并使用它在 msdn 社区站点上创建错误报告。顺便说一句,您可以显示您的代码吗?也许有一些东西可以改变以使这项工作?
-
Read the manual: "注意:如果抛出 WebException,请使用异常的 Response 和 Status 属性来确定来自服务器的响应。” 另见this duplicate。
-
@CodeCaster :如问题中所述,尝试访问响应流会导致“无法从流中读取”异常。引用副本中提供的答案不正确
-
@feroze 这发生在 .NET 4.0 中(我假设所有早期版本)。我倾向于同意你的观点,这是框架中的一个错误
-
@GrantDG 请出示您的代码。如果您使用
catch (WebException wex) { var resp = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd(); },它应该可以工作。这很可能不是框架中的错误,而是您的代码中的错误,否则很多人会遇到它。
标签: c# .net api httpwebrequest linkedin