如果我使用带有某些典型POST和GET方法的.NET Core 2.1创建API,则这些方法的返回类型最合适,ActionResult<T>
或async Task<T>
?我的一位朋友在他创建的每个API中都使用后者,而这正是我所在的公司所使用的,而PluralSite的教程则使用了前者。我知道每一个都在做什么,但是我不确定对于任何给定的HTTP请求应该实现哪个?
答案 0 :(得分:9)
ASP.NET Core为Web API控制器操作返回类型提供以下选项:
Specific type (T)
IActionResult
ActionResult<T>
最简单的操作返回原始或复杂的数据类型(例如,字符串或自定义对象类型)。如果没有已知的条件可以防止在执行操作期间执行操作,则返回特定类型就足够了。前面的操作不接受任何参数,因此不需要参数约束验证。
当需要在一个动作中考虑已知条件时,会引入多个返回路径。在这种情况下,通常将ActionResult
返回类型与原始或复杂返回类型混合使用。为适应此类操作,必须使用IActionResult
或ActionResult<T>
。
当动作中可能有多个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>
和
T
至ActionResult
。 ActionResult<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