c# - 在 Postman 正文中捕获外部 API 错误消息

标签 c# .net api error-handling

我正在使用以下代码来完成外部 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 block 中,因为您只是在 try(ing) 和 catch(ing) request.GetResponse() 。您的其余代码需要放在 try catch block 之外,以便您可以单独捕获该代码中的异常。

关于c# - 在 Postman 正文中捕获外部 API 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650944/

相关文章:

c# - C# 中的 Oracle 数据库和存储库模式

c# - 使用线程(任务)做工作包含 I/O

c# - WCF 元数据缺少操作

python - oauth、python 和 google API?

Java:当身份验证被排除时我应该/抛出什么?

javascript - Google Blogger API 错误 400

c# - 异步/等待 ftpupload 损坏上传的文件

c# - <> 转换为 64BaseString 和从 64BaseString 时 Xml 丢失

c# - asp.net文件上传

.net - 32 位进程如何与 .NET 中的 64 位进程通信?