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

Error handling wep api的返回类型,便于错误处理,error-handling,asp.net-web-api2,asp.net-web-api,return-type,Error Handling,Asp.net Web Api2,Asp.net Web Api,Return Type,我有一个从angularjs应用程序调用的web api。我有一个方法(如果一切正常)返回字符串列表。但如果出现问题,我发现了一个异常,我应该如何处理 我对这个很陌生,我想知道我应该如何处理错误?在这种情况下,我应该使用什么样的返回类型,有什么最佳实践吗 一, 二, [HttpGet] [路由(“{user}”)] 公共列表GetItems(字符串用户) { 返回adObject.GetItems(用户); } 您应该返回一个500 http状态代码,其中包含足够的信息,以告知UI发生错误,而不

我有一个从angularjs应用程序调用的web api。我有一个方法(如果一切正常)返回字符串列表。但如果出现问题,我发现了一个异常,我应该如何处理

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

一,

二,

[HttpGet]
[路由(“{user}”)]
公共列表GetItems(字符串用户)
{
返回adObject.GetItems(用户);
}

您应该返回一个500 http状态代码,其中包含足够的信息,以告知UI发生错误,而不显示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,其中包含有关问题的更多详细信息。如果您想调查它们的签名或查看您可能能够使用的其他签名,这两种方法都在ApicController上

另一个选项是创建从ExceptionHandler继承的自定义异常筛选器。本网站提供了一个很好的示例:

希望有帮助

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