Web API 操作返回类型最佳实践

Mac*_*akM 5 c# asp.net-web-api

从这个来源:http : //www.tutorialsteacher.com/webapi/action-method-return-type-in​​-web-api我得到了,Web API 中的 Action 可以返回:

  1. 空白
  2. 原始类型或复杂类型
  3. HttpResponseMessage
  4. IHttpActionResult

我知道每个选项的作用,但我很好奇是否有一些最佳实践,例如总是使用 IHttpActionResult 作为返回类型,因为它是所有其他选项的超集。

dee*_* zg 2

我用的asp.net core不过原理是一样的。另外,并不是说这是最好的方法,但对我来说这是非常有效的设置。

我总是使用IActionResult它对我来说最灵活。然后,我可以让操作方法完全不知道DTO我的服务(操作方法调用)返回的信息。我所做的或多或少都是这样的:

[CustomExceptionsFilter]
[CustomValidateModelFilter]
[Authorize(Roles="whatever")]
public IActionResult ActionMethod(params){
  return Ok(this._myService.whatever());
}
Run Code Online (Sandbox Code Playgroud)

这样,如果您更改DTO服务返回(这种情况经常发生,尤其是在早期开发阶段),我根本不需要触摸我的控制器。

另外,我有非常统一的返回方式,其中我的自定义异常错误过滤器捕获所有服务层自定义异常,例如验证异常、操作异常等......

[更新]

在过滤器中,您实际上并没有传统意义上的返回。您宁愿设置您的context.result(类型为IActionResult)。所以,假设我的服务抛出了我的自定义MyServiceOperationException("You cannot do that")异常。

我在异常过滤器中所做的是:

public override void OnException(ExceptionContext context)
    {
      if (context.Exception is MyServiceOperationException)
      {
        context.Result = new BadRequestObjectResult(new MyErrorResult(){ 
          Message = context.Exception.Message,
          Code=context.Exception.MyErrorCode }
          );
      }
}
Run Code Online (Sandbox Code Playgroud)