首页 > 解决方案 > 在 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 指令或程序集引用?)

我明白为什么会这样。我不知道如何解决它,同时保留响应发出的状态代码。

我用谷歌搜索了它,但得到了一些非常古老的东西完全不相关的东西相当不相关的东西。就是这样 - 没有太多其他热门歌曲,这也令人惊讶。

如何发出状态代码并应用异步方法?它们不是相互排斥的,不是吗?

标签: c#asynchronousasp.net-coreasp.net-web-apiasp.net-core-2.2

解决方案


你为什么不等待结果呢?

[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
  var output = await Context.Things
    .Select(e => new ThingVm(e))
    .ToListAsync();

  return Ok(output);
}

推荐阅读