非泛型方法 '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();
}
我有 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();
}