返回类型为 ActionResult 的 API 控制器不接受 OkObjectResult

问题描述 投票:0回答:2

我想创建一个 C# API,而不是使用控制器/最小 API,而是使用包 Ardalis.ApiEndpoints(基于控制器)

基于我不想回复 200 的情况,我尝试了以下示例代码

using Ardalis.ApiEndpoints;
using Microsoft.AspNetCore.Mvc;

namespace MyProj;

public sealed class Handler : EndpointBaseAsync.WithoutRequest.WithActionResult<string>
{
    [HttpGet("foo")]
    public override Task<ActionResult<string>> HandleAsync(CancellationToken cancellationToken = default)
    {
        if (false)
        {
            return BadRequest("err");
        }

        return Ok("bar");
    }
}

不幸的是我的代码是错误的,我得到了错误

无法将表达式类型“Microsoft.AspNetCore.Mvc.OkObjectResult”转换为返回类型“System.Threading.Tasks.Task

我尝试查看示例代码,例如https://github.com/ardalis/ApiEndpoints/blob/main/sample/SampleEndpointApp/Endpoints/Authors/Delete.cs

但我看不出有什么区别。你知道哪里出了问题或遗漏了什么吗?

c# asp.net-core-webapi
2个回答
0
投票

您需要将函数更改为如下所示,当您返回

Task
时,您的函数需要具有 async 修饰符。查看下面链接的 C# 文档,了解有关异步编程的更多信息。

public override async Task<ActionResult<string>> HandleAsync(CancellationToken cancellationToken = default)

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/async

https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-return-types#tasktresult-return-type


0
投票

您定义了返回

Task<ActionResult<string>>
的方法,但该方法未标记为
async
(不存在
async
关键字)。

async
关键字添加到方法中(并考虑使其执行异步调用) - 或者 - 删除返回类型周围的
Task<>

© www.soinside.com 2019 - 2024. All rights reserved.