gpt4 book ai didi

c# - 我应该在 .Net Web Api 2 中返回状态代码还是抛出异常

转载 作者:太空狗 更新时间:2023-10-30 00:51:04 25 4
gpt4 key购买 nike

我见过像 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());

最佳答案

IHttpActionResult 是 WebApi 2 中添加的功能。WebApi 1 中的传统方法,即创建 HttpResponseMessage 或抛出 HttpResponseException,您仍然可以使用,但开发了 IHttpActionResult 以简化流程。

IHttpActionResult 接口(interface)有一个方法:

public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}

NotFound方法只是创建一个 NotFoundResult它返回带有 HttpStatusCode.NotFound 的空响应。这基本上与抛出 HttpResponseException(HttpStatusCode.NotFound) 完全相同,但语法更统一。

IHttpActionResult 接口(interface)还允许您轻松创建自定义 ActionResult 类以返回任何 HttpStatusCode 或您希望的任何内容类型。

关于c# - 我应该在 .Net Web Api 2 中返回状态代码还是抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com