gpt4 book ai didi

c# - 无法将类型 'Microsoft.AspNetCore.Mvc.NotFoundResult' 隐式转换为 'System.Threading.Tasks.Task'

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:13 28 4
gpt4 key购买 nike

考虑这样的 Controller 操作:

[HttpGet]
[Route("blog/{slug}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<Blog> Get(string slug)
{
return await Task.Run(() =>
{
var model = Data.GetBlog(slug);
if (model == null)
{
return NotFound();
}
return Ok(model);
});
}

我收到每个返回的错误:

Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.NotFoundResult' to 'System.Threading.Tasks.Task'
Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.OkObjectResult' to 'System.Threading.Tasks.Task'
Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type

如果我注释掉其中一种响应类型(因此只有 NotFound() 或只有 Ok()),它可以正常编译。

我认为两者都继承自同一个基类,因此都可以在同一个 Action 中使用。

我哪里错了?

附注在编写异步 Data 方法之前,Task.Run 是我的懒惰。

最佳答案

Task.Run代码正在返回 IActionResult您尝试以 Blog 形式返回的派生结果类型。因此错误

这就是ActionResult<T>是为了。

考虑以下重构。

[HttpGet]
[Route("blog/{slug}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<Blog>> Get(string slug) {
Blog model = await Task.Run(() => Data.GetBlog(slug));
if (model == null) {
return NotFound();
}
return model;
}

引用 Controller action return types in ASP.NET Core Web API

关于c# - 无法将类型 'Microsoft.AspNetCore.Mvc.NotFoundResult' 隐式转换为 'System.Threading.Tasks.Task',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58275964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com