ASP.NET Core API-ActionResult <t>与异步Task <t>

时间:2019-01-30 03:23:16

标签: c# asp.net-core asp.net-core-webapi

如果我使用带有某些典型POST和GET方法的.NET Core 2.1创建API,则这些方法的返回类型最合适,ActionResult<T>async Task<T>?我的一位朋友在他创建的每个API中都使用后者,而这正是我所在的公司所使用的,而PluralSite的教程则使用了前者。我知道每一个都在做什么,但是我不确定对于任何给定的HTTP请求应该实现哪个?

2 个答案:

答案 0 :(得分:9)

ASP.NET Core为Web API控制器操作返回类型提供以下选项:

  • Specific type (T)
  • IActionResult
  • ActionResult<T>

特定类型(T):

最简单的操作返回原始或复杂的数据类型(例如,字符串或自定义对象类型)。如果没有已知的条件可以防止在执行操作期间执行操作,则返回特定类型就足够了。前面的操作不接受任何参数,因此不需要参数约束验证。

当需要在一个动作中考虑已知条件时,会引入多个返回路径。在这种情况下,通常将ActionResult返回类型与原始或复杂返回类型混合使用。为适应此类操作,必须使用IActionResultActionResult<T>

IActionResult类型:

当动作中可能有多个IActionResult返回类型时,ActionResult返回类型是合适的。 ActionResult类型表示各种HTTP状态代码。属于此类别的一些常见回报类型为BadRequestResult (400)NotFoundResult (404)OkObjectResult(200)

ActionResult<T>类型:

ASP.NET Core 2.1 添加了新的编程约定,使构建干净和描述性的Web API更容易。 ActionResult<T> 是一种新类型,允许应用返回响应类型或任何其他操作结果(类似于 IActionResult ),而仍指示响应类型。

ActionResult<T> 更特定于 ASP.NET Core> = 2.1 中的Web API,并且ActionResult<T>比{{ 1}}类型:

  • 可以排除IActionResult属性的Type属性。 例如,[ProducesResponseType]是 简化为[ProducesResponseType(200, Type = typeof(Product))]。该动作的预期 而是从[ProducesResponseType(200)]中的T推断返回类型。
  • 隐式强制转换运算符支持ActionResult<T>TActionResultActionResult<T>转换为T, 意味着返回新的ObjectResult简化为ObjectResult(T);

有关更多详细信息:Controller action return types in ASP.NET Core Web API

答案 1 :(得分:4)

第三种解决方案:IActionResult任务,如下所示:

//constructor
Person::Person(int b){
number = b;
cout << "The persons number is: "<< b << end1;
}
Person::getNum(){
return number;
}

看看Microsoft的示例以及为什么他们返回接口:IActionResult