Ash*_*sam 5 c# httpwebrequest httpwebresponse asp.net-web-api
我们有一个由第三方公开的 Web API,我们对此没有任何控制权。看起来他们正在包装自定义错误消息模型以返回 400(错误请求))。
\n\n使用 Postman 时我们得到自定义错误消息模型
\n\n{\n "Message":\xc2\xa0"Site Name Exists",\n "ErrorId":\xc2\xa0"<some-guid>",\n "ErrorCode":\xc2\xa0400,\n "GeneratedTime":\xc2\xa0"<some-datatime>",\n "RequestedUri":\xc2\xa0"origin-api-uri"\n} \nRun Code Online (Sandbox Code Playgroud)\n\n我们尝试使用HttpWebResponse或WebResponse从 API 获取响应,但它在 上抛出异常并显示 400 代码httpWebRequest.GetResponse()。它没有给我们预期的响应,就像我们在 Postman 中得到的那样,但它说 400(错误请求)并带有默认错误消息“远程服务器返回错误”。
我们希望以邮差身份获取原始错误消息。有什么想法吗?
\n默认情况下,大多数异常都会转换为状态代码为 500、内部服务器错误或 400 错误请求的 HTTP 响应,这是非常痛苦的情况。您需要在 catch 块中捕获 WebException。
试一试。
catch (WebException ex)
{
StreamReader sr = new StreamReader(ex.Response.GetResponseStream());
Console.WriteLine(sr.ReadToEnd());
}
Run Code Online (Sandbox Code Playgroud)