c# - 具有异步静态方法的最小 API

标签 c# asp.net-core asynchronous minimal-apis

当我们在 NET 7 中创建类似的东西时:

app.MapPost("/test", SomeEndpoint.Test);

这是我的 SomeEndpoint.Test:

public static class SomeEndpoint
{
    public static IResult Test(HttpContext httpContext)
    {
        var form = httpContext.Request.ReadFormAsync().Result;
        return Results.Ok(form);
    }
}

那么一切都会顺利进行。但我想让它异步,所以现在我的 SomeEndpoint.Test如下所示:

public static class SomeEndpoint
{
    public static async Task<IResult> Test(HttpContext httpContext)
    {
        var form = await httpContext.Request.ReadFormAsync();
        return Results.Ok(form);
    }
}

繁荣。这不起作用,我总是得到 200 OK 响应(即使我将 Results.Ok 更改为 Results.BadRequest )。我做错了什么?

最佳答案

您看到的问题似乎与您传递额外参数这一事实有关。删除 HttpContext 也会使您的示例正常工作。

当将参数传递给这样的异步静态方法时,似乎您必须提供 CancellationToken 参数,否则它将与基于 Task 的方法不匹配组。

以下作品:

public static class SomeEndpoint
{
    public static async Task<IResult> Test(
        HttpContext httpContext, 
        CancellationToken token)
    {
        var form = await httpContext.Request.ReadFormAsync(token);
        return Results.Ok(form);
    }
}

关于c# - 具有异步静态方法的最小 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74628221/

相关文章:

javascript - 如何阻止执行直到执行异步调用?

c# - 如何在不重复 if/else 代码的情况下使用 ASP.NET Core 基于资源的授权

c# - ASP .Net Core 中静态方法的依赖注入(inject)

c# - 在 C# 中加速 SOAP 请求

c# - 在 C# winform 中的文本上放置阴影

c# - Redis 缓存无法访问已处置的对象

flutter - 检索运行时更改的ThemeData问题

c# - 如何根据字段值自动创建具体类

c# - 没有安全性的 BasicHttpBinding

c# - 使用 Mono 的 mcs 使用 Tuple 编译代码