我应该 return 状态代码还是在 .Net Web 中抛出异常 Api 2
Should I return a status code or throw an exception in .Net Web Api 2
我见过像this
这样的例子
public IHttpActionResult GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Ok(item);
}
但我也认为这是一个选择
public IHttpActionResult GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
return NotFound();
}
return Ok(item);
}
抛出异常或简单地返回 NotFound(IHttpActionResult 实例)是否有优势?
我知道在响应/请求管道中有一些阶段可以处理这些结果中的任何一个,例如第一个示例
public class NotFoundExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotFoundException)
{
// Do some custom stuff here ...
context.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
}
}
}
...
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotFoundExceptionFilterAttribute());
抛出异常总是应该被视为异常情况。虽然很少见,但仍有可能发生,应妥善处理。
这取决于您需要多久从数据库中检索不存在的项目。请记住,异常抛出通常总是性能杀手。
你也应该看看这个:
When to throw an exception?
IHttpActionResult
是 WebApi 2 中添加的功能。您仍然可以使用 WebApi 1 中的传统方法,即创建 HttpResponseMessage
或抛出 HttpResponseException
,但开发 IHttpActionResult
是为了简化流程。
IHttpActionResult
接口有一个方法:
public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
NotFound
method simply creates a NotFoundResult
,其中 return 是一个带有 HttpStatusCode.NotFound
的空响应。这本质上与 throwing HttpResponseException(HttpStatusCode.NotFound)
完全相同,但语法更统一。
IHttpActionResult
界面还允许您轻松创建自定义 ActionResult
类 到 return 任何 HttpStatusCode
或您想要的任何内容类型。
我见过像this
这样的例子public IHttpActionResult GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Ok(item);
}
但我也认为这是一个选择
public IHttpActionResult GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
return NotFound();
}
return Ok(item);
}
抛出异常或简单地返回 NotFound(IHttpActionResult 实例)是否有优势?
我知道在响应/请求管道中有一些阶段可以处理这些结果中的任何一个,例如第一个示例
public class NotFoundExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotFoundException)
{
// Do some custom stuff here ...
context.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
}
}
}
...
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotFoundExceptionFilterAttribute());
抛出异常总是应该被视为异常情况。虽然很少见,但仍有可能发生,应妥善处理。
这取决于您需要多久从数据库中检索不存在的项目。请记住,异常抛出通常总是性能杀手。
你也应该看看这个:
When to throw an exception?
IHttpActionResult
是 WebApi 2 中添加的功能。您仍然可以使用 WebApi 1 中的传统方法,即创建 HttpResponseMessage
或抛出 HttpResponseException
,但开发 IHttpActionResult
是为了简化流程。
IHttpActionResult
接口有一个方法:
public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
NotFound
method simply creates a NotFoundResult
,其中 return 是一个带有 HttpStatusCode.NotFound
的空响应。这本质上与 throwing HttpResponseException(HttpStatusCode.NotFound)
完全相同,但语法更统一。
IHttpActionResult
界面还允许您轻松创建自定义 ActionResult
类 到 return 任何 HttpStatusCode
或您想要的任何内容类型。