400 错误请求 | 从 ASP.NET Web API 接收自定义错误消息或模型

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} \n
Run Code Online (Sandbox Code Playgroud)\n\n

我们尝试使用HttpWebResponseWebResponse从 API 获取响应,但它在 上抛出异常并显示 400 代码httpWebRequest.GetResponse()。它没有给我们预期的响应,就像我们在 Postman 中得到的那样,但它说 400(错误请求)并带有默认错误消息“远程服务器返回错误”。

\n\n

我们希望以邮差身份获取原始错误消息。有什么想法吗?

\n

Meh*_*han 6

默认情况下,大多数异常都会转换为状态代码为 500、内部服务器错误或 400 错误请求的 HTTP 响应,这是非常痛苦的情况。您需要在 catch 块中捕获 WebException。

参考: ASP.NET Web API中的异常处理

试一试。

 catch (WebException ex)
        {
            StreamReader sr = new StreamReader(ex.Response.GetResponseStream());
            Console.WriteLine(sr.ReadToEnd());
        }
Run Code Online (Sandbox Code Playgroud)