Cal*_*len 7 c# asp.net-core asp.net-core-webapi
如果我使用.NET Core 2.1和一些典型的POST和GET方法创建API,那么这些方法的返回类型是最合适的,ActionResult<T>还是async Task<T>?我的一个朋友在他创建的每个API中都使用后者,这就是我所在的公司所使用的,而PluralSite上的教程使用前者.我理解每个人做了什么,但我不确定哪个应该为任何给定的HTTP请求实现?
ASP.NET Core为Web API控制器操作返回类型提供以下选项:
Specific type (T)IActionResultActionResult<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核心> = 2.1中的 Web API,并 ActionResult<T>提供以下IActionResult类型的好处:
[ProducesResponseType]属性的类型属性可以被排除.例如,[ProducesResponseType(200, Type = typeof(Product))]简化为[ProducesResponseType(200)].相反,动作的预期返回类型是从Tin中推断出来的ActionResult<T>.T和
ActionResult到ActionResult<T>.T转换为ObjectResult,这意味着将返回new ObjectResult(T);简化为return T;.有关更多详细信息:ASP.NET Core Web API中的Controller操作返回类型
第三个解决方案:IActionResult任务,如下所示:
[HttpGet]
[ProducesResponseType(typeof(IList<Currency>), 200)]
public async Task<IActionResult> GetAll()
{
return Ok(await _typeService.GetCurrenciesAsync().ConfigureAwait(false));
}
[HttpGet("{id}", Name = "GetCurrency")]
[ProducesResponseType(typeof(Currency), 200)]
public async Task<IActionResult> Get([FromRoute]int id)
{
return Ok(await _expenseService.GetCurrencyAsync(id).ConfigureAwait(false));
}
Run Code Online (Sandbox Code Playgroud)
查看Microsoft的示例以及为什么它们返回接口:IActionResult
| 归档时间: |
|
| 查看次数: |
4889 次 |
| 最近记录: |