我想创建一个 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
但我看不出有什么区别。你知道哪里出了问题或遗漏了什么吗?
您需要将函数更改为如下所示,当您返回
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
您定义了返回
Task<ActionResult<string>>
的方法,但该方法未标记为 async
(不存在 async
关键字)。
将
async
关键字添加到方法中(并考虑使其执行异步调用) - 或者 - 删除返回类型周围的 Task<>
。