从这个来源:http://www.tutorialsteacher.com/webapi/action-method-return-type-in-web-api我得到了,Web API中的Action可以返回:
我知道每个选项的作用,但我很好奇是否有一些最佳实践,例如总是使用IHttpActionResult作为返回类型,因为它是所有其他选项的超集。
答案 0 :(得分:1)
我使用asp.net core
但原则是一样的。此外,不是说这是最好的方式,但对我来说这是非常好的设置。
我总是使用IActionResult
作为我最灵活的选择。然后,我可以完全不知道我的服务(哪个动作方法调用)返回DTO
的动作方法。我做的或多或少都是这样的:
[CustomExceptionsFilter]
[CustomValidateModelFilter]
[Authorize(Roles="whatever")]
public IActionResult ActionMethod(params){
return Ok(this._myService.whatever());
}
这样,如果您更改服务返回的DTO
(这种情况很快发生,特别是在早期开发阶段),我就不会这样做。至少要触摸我的控制器。
此外,我有几乎统一的方式返回我的自定义异常错误过滤器捕获所有服务层自定义异常,如验证异常,操作异常等...
<强> [UPDATE] 强>
在过滤器中,您实际上并不是传统意义上的回归。您宁可设置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 }
);
}
}
答案 1 :(得分:1)
IActionRsult
非常灵活,只能返回响应,Json数据或视图。
不仅对于WepAPI,而且对于任何应用程序,最好返回您可以使用的最严格类型,但同样,如果控制器中的特定操作可能返回不同的内容,IActionResult
是要走的路。
答案 2 :(得分:1)
IHttpActionResult的优势以及我一直使用它的原因在于它引导您将您的操作视为生成HTTP响应。 ASP.NET长期以来一直在混淆广泛理解的协议的简单部分,在我看来,这是朝着正确方向迈出的一步!
答案 3 :(得分:1)
选项1:返回void,Primitive类型,复杂类型
优点:
缺点:
选项2:返回HttpResponseMessage
优点:
缺点:
选项3:返回IHttpActionResult
Web API 2.0引入了这个。
优点:
缺点:
<强>结论强>
正如您所看到的,每个选项都有利有弊。对我来说,每个选项的优点都超过缺点。我的选择是:选项3.但它不是一成不变的。