我正在使用以下代码来完成外部 API 调用。
WebResponse response = request.GetResponse();
string JSONResult = null;
var data = response.GetResponseStream();
using (var reader = new StreamReader(data))
{
JSONResult = reader.ReadToEnd();
}
当外部API出现异常时,request.GetResponse会抛出错误。但是,我无法获取显示的消息,例如
{
"Message": "No HTTP resource was found that matches the request URI '<site>/Foo'.",
"MessageDetail": "No type was found that matches the controller named 'Foo'."
}
虽然这显示在 Fiddler 和 Postman 中,但当它作为异常抛出时,我无法在任何地方收到此消息。
当外部 API 调用发生错误时,如何获取此具体详细信息?
您需要捕获异常,然后读取异常的响应流。读取异常的响应流与读取请求的响应相同。方法如下:
WebRequest request =
WebRequest.Create("http://...");
WebResponse response = null;
try
{
response = request.GetResponse();
}
catch (WebException webEx)
{
if (webEx.Response != null)
{
using (var errorResponse = (HttpWebResponse)webEx.Response)
{
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
string error = reader.ReadToEnd();
// TODO: use JSON.net to parse this string
}
}
}
}
不要将所有代码放在上面的 try 块中,因为您只是 try(ing) 和 catch(ing)
request.GetResponse()
。其余代码需要超出该 try catch 块,以便您可以单独捕获该代码中的异常。