return 键入 wep api 以便于错误处理

return type for wep api for easy error handling

我有一个网络 api,我从我的 angularjs 应用程序调用它。我有一个方法(如果一切正常)我 return 一个字符串列表。但是,如果出现问题并且我捕获到异常,我应该如何处理呢?

我对此很陌生,我想知道我应该如何处理错误?对于在这种情况下我应该使用哪种 return 类型,是否有任何最佳实践?

1.

    [HttpGet]
    [Route("{user}")]
    public IHttpActionResult GetItems(string user)
    {
        try
        {
            return Ok(adObject.GetItems(user)); //List of strings
        }
        catch (Exception e)
        {
            //return e how? Or log error? Both?
            throw;
        }
    }

2.

    [HttpGet]
    [Route("{user}")]
    public List<string> GetItems(string user)
    {
        return adObject.GetItems(user);
    }

您应该 return 一个包含足够信息的 500 http 状态代码来告诉 UI 发生了错误,而不会泄露 API 的内部工作原理。例如,您可以说 "unable to insert a new record"。如果错误是 UI 发送错误数据的结果,您将改为发送 400 系列状态代码,例如 422。

要做到这一切,有两种选择。您可以像这样简单地发回一个 InternalServerError:

[HttpGet]
[Route("{user}")]
public IHttpActionResult GetItems(string user)
{
    try
    {
        return Ok(adObject.GetItems(user)); //List of strings
    }
    catch (Exception e)
    {
        Return InternalServerError();
        LogError(e);
    }
}

这只会 return 500 错误并记录异常(您需要编写 LogError 方法)。

您也可以调用 ResponseMessage 而不是 InternalServerError 和 return 您自己的 HttpResponseMessage 并提供有关该问题的更多详细信息。如果您想研究它们的签名或查看您可能会使用的其他方法,这两种方法都在 ApiController 上。

另一种选择是创建一个继承自 ExceptionHandler 的自定义异常过滤器。本网站提供了如何执行此操作的一个很好的示例:

http://www.brytheitguy.com/?p=29

希望对您有所帮助。