在我使用的 Web API 中,在将 JSON 响应发送到调用程序之前,我要检查几个条件。
我处理错误的一种方法是返回如下内容:
return Content(HttpStatusCode.NotFound, "This user reached maximum API calls for today.", new JsonMediaTypeFormatter(), "application/json");
当我使用类似这样的方法测试 API 时:
var result = new System.Net.WebClient().DownloadString("BadURL");
我收到一个未处理的异常错误
,这是预期的。
为了解决这个问题,我将错误处理逻辑中的 return 语句更改为如下所示:
return Content(HttpStatusCode.OK, "This user reached maximum API calls for today.", new JsonMediaTypeFormatter(), "application/json");
因此,即使用户使用上面相同的 WebClient()
,他们也会收到有用的错误消息(该错误消息和其他错误消息在网站上有详细记录) 异常
。
这是处理 ASP.NET Web API 中的错误的好方法吗?
最佳答案
我认为您应该使您的 API 围绕标准状态代码建模。 (出现错误时不应返回 200)。
以下是 REST API 的一些常用状态代码 http://www.restapitutorial.com/httpstatuscodes.html
您看到的问题只是 WebClient
在许多状态代码(例如 404)上抛出异常。我不认为你的 api 应该围绕着让 WebClient 不抛出异常。您可以将 WebClient 包装在 try catch 中并获取 WebException 并从那里获取状态代码和错误消息。
(未经测试的代码,但类似于此)
try
{
var result = new System.Net.WebClient().DownloadString("BadURL");
// process result
}
catch (WebException webEx)
{
var statusCode = ((HttpWebResponse)webEx.Response).StatusCode;
var body = new StreamReader(webEx.Response.GetResponseStream()).ReadToEnd();
switch (statusCode)
{
case 404:
// parse error from your body (or in your case it is your body)
case ...:
}
}
关于c# - 在 ASP.NET Web API 中处理错误的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246678/