c# - 在 Core 2.2 中返回异步结果时无法使用 Ok(...) 作为状态码
问题描述
我为 WebAPI 搭建了一个看起来像这样的模板。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
Task<List<ThingVm>> output = Context.Things
.Select(e => new ThingVm(e))
.ToListAsync();
return await output;
}
我注意到返回的结果不会传达任何状态代码(因为我没有提供 200 或 404 等)。所以我添加了标准的、通常的Ok(...)
调用。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
...
return await Ok(output);
}
遗憾的是,计算机不理解该操作并像这样解释错误。
CS1061“OkObjectResult”不包含“GetAwaiter”的定义,并且找不到接受“OkObjectResult”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用?)
我明白为什么会这样。我不知道如何解决它,同时保留响应发出的状态代码。
我用谷歌搜索了它,但得到了一些非常古老的东西,完全不相关的东西和相当不相关的东西。就是这样 - 没有太多其他热门歌曲,这也令人惊讶。
如何发出状态代码并应用异步方法?它们不是相互排斥的,不是吗?
解决方案
你为什么不等待结果呢?
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
var output = await Context.Things
.Select(e => new ThingVm(e))
.ToListAsync();
return Ok(output);
}
推荐阅读
- r - 什么功能相当于colorRampPalette
- python - 是否有 PyPDF2 方法来确定从 PDF 读取的文本是否为粗体?
- python - Pandas - 根据其他条件计算一列的内容
- odoo - Odoo 13 通过 api 创建销售记录?
- javascript - Chrome 选项卡冻结和 SetTimeout/Web Workers
- css - 在添加子项之前将画布子项缩放到由布局确定的父项宽度和高度
- javascript - 在 js 中制作动态字典,其中包含唯一的标头值和数据
- java - 从输入显示到另一个活动listview android studio的问题
- javascript - 通过单击图像选择主要和次要选项
- sql - 如何获取表中下一个和下一个下一个日期的值