非泛型方法 'ControllerBase.Ok()' 不能与类型参数一起使用

The non-generic method 'ControllerBase.Ok()' cannot be used with type arguments

我有 asp.net 核心网络 api 应用程序,其中控制器 class 从 Controller : ControllerBase 扩展,现在我收到错误

The non-generic method 'ControllerBase.Ok()' cannot be used with type arguments

对于下面的 api 代码,这里有什么问题?

[HttpPost]
    public async Task<bool> Post()
    {
        return Ok<bool>(await _someTask);
    }

基于下面的评论我是这样实现的,

[HttpPost]
    public async Task<ActionResult<bool>> Post()
    {
        return Ok(await SomeTask());
    }

    private async Task SomeTask()
    {
        //some database insert operation
        throw new NotImplementedException();
    }

然后我在 return Ok(await SomeTask());

处遇到错误

cannot convert from 'void' to 'object'Controller.cs 49 Active

The ControllerBase's Ok method 有两个重载:Ok()Ok(object)

没有通用重载,这就是您收到错误消息的原因。

作为旁注,虽然对于这个简化版本它是 perfectly fine to return a Task<bool>,但更现实的情况是一个方法有多个代码路径,或者至少有一个以上的预期输出(例如,它可能 return 404 或 500 http 状态代码 - 未找到/内部服务器错误)。

在这些情况下,您需要 return Task<ActionResult<T>>。 这样,当使用像 swagger 这样的工具自动生成您的客户端代码时,您将获得更适合您的 api.

的客户端

更新
你的 await 放错地方了。
另外,如果你想 return 一个 bool,那么你的另一个 async 方法应该 return Task<bool>.

尝试以下操作:

[HttpPost]
public async Task<ActionResult<bool>> Post()
{
    var result = await SomeTask();
    return Ok(result);
}

private async Task<bool> SomeTask()
{
    //some database insert operation
    throw new NotImplementedException();
}