簡體   English   中英

無法將類型“Microsoft.AspNetCore.Mvc.NotFoundResult”隱式轉換為“System.Threading.Tasks.Task”

[英]Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.NotFoundResult' to 'System.Threading.Tasks.Task'

考慮像這樣的 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() ),它編譯得很好。

我認為兩者都繼承自同一個基礎 class ,因此兩者都可以在同一個操作中使用。

我哪里錯了?

ps Task.Run 是我在編寫異步Data方法之前很懶惰。

Task.Run代碼正在返回您嘗試作為Blog類型返回的IActionResult派生結果。 因此錯誤

這就是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;    
}

參考ASP.NET 內核 Web ZDB974238714CA8DE634A7CE1D083A14 中的 Controller 動作返回類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM