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
希望对您有所帮助。
我有一个网络 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
希望对您有所帮助。