wep api的返回类型,以便于错误处理

时间:2015-12-08 08:15:25

标签: error-handling asp.net-web-api2 asp.net-web-api return-type

我有一个web api,我从angularjs应用程序调用。我有一个方法,如果一切正常,我返回一个字符串列表。但如果出现问题并且我遇到异常,我应该如何处理呢?

我对此很陌生,我想知道如何处理错误?在这样的情况下,我应该使用哪种返回类型的最佳实践吗?

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);
    }

1 个答案:

答案 0 :(得分:1)

您应该返回500 http状态代码,其中包含足够的信息,告诉用户界面发生错误而不泄露API的内部工作原理。例如,您可能会说“无法插入新记录”。如果错误是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);
    }
}

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

您也可以调用ResponseMessage而不是InternalServerError,并返回您自己的HttpResponseMessage,其中包含有关问题的更多详细信息。如果你想调查他们的签名或者看看你可能能够使用的其他人,这两种方法都在ApiController上。

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

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

希望有所帮助。