我有一个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);
}
答案 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
希望有所帮助。