c# - 在 ASP.NET Web API 中处理错误的正确方法

标签 c# asp.net asp.net-mvc asp.net-web-api

在我使用的 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/

相关文章:

c# - 推送索引数组

c# - C# 编译器如何使用泛型?

c# - 编辑项目列表 c#

javascript - 使用 .NET MVC4 的实用实时应用程序的最佳实践

c# - 无法隐式转换类型'System.Linq.IQueryable?

c# - Resharper 自定义模式变量

javascript - AngularJS-如何格式化包含一系列数字的字符串以在 HTML 表格上显示为列表?

asp.net - 如何使 ASP.NET 停止将 null 解释为字符串

jquery - 通过 jquery 更改 DisplayFor Text/Value

c# - Google .NET API - 除了 FileDataStore 之外还有其他数据存储吗?