c# - 这个 .NET 7 最小 API 总是返回 200

标签 c# .net-7.0 minimal-apis

我对最小 API 的概念还很陌生,但是 the documentation seems quite clear 。您只需使用 ResultsTypedResults 返回您想要的响应代码。

所以我做了一个非常基本的尝试:

app.MapPost("/api/test", async context =>
{
    var form = await context.Request.ReadFormAsync();
    var file = form.Files["File"];
    Results.NoContent();
});

但即便如此,它总是返回 200 状态代码。我还检查了 .NET 6 和 7(我的目标是 .NET 7)中的许多其他 Material ,其中的方法委托(delegate)具有指定的 Task 返回类型 here在文档中,但我得到了相同的结果(200)。请注意,我也尝试返回 NotFound,但我仍然得到相同的结果。

app.MapPost("/api/test", TestReturn);

static async Task<IResult> TestReturn(HttpContext context)
{
    var form = await context.Request.ReadFormAsync();
    var file = form.Files["File"];
    return TypedResults.NoContent();
}

为什么我除了 200 之外什么都得不到?

最佳答案

这里有两个问题:

  1. 您忘记使用return:

    app.MapPost("/api/test", async context =>
    {
        var form = await context.Request.ReadFormAsync();
        var file = form.Files["File"];
        return Results.NoContent();
    });
    
  2. 异步处理程序仅接受 HttpContext 存在一个已知问题,您可以通过添加额外参数(例如 CancellationToken)来解决此问题:

    app.MapPost("/api/test", async (HttpContext context, CancellationToken ct) =>
    {
        var form = await context.Request.ReadFormAsync();
        var file = form.Files["File"];
        return Results.NoContent();
    });
    

另请注意,在 ASP.NET Core 7 中支持绑定(bind)表单文件 out of the box :

app.MapPost("/api/test", async (IFormFileCollection files) =>
{
    var file = files["File"];
    return Results.NoContent();
});

另请参阅:

关于c# - 这个 .NET 7 最小 API 总是返回 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76836063/

相关文章:

c# - Microsoft图表控件无法设置背景透明

c# - FluentValidation 自动验证请求 .NET 7 Minimal API

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

json - 最小 API - 请求正文中的 JSON 无效

C# 进行并发 HTTP 调用

c# - 如何在 ASP.NET Core 中间件中获取传入请求正文和传出响应正文?

c# - 当我不知道它可能抛出的位置时如何记录异常?

c# - Gridview 的 DataKeys 属性和 DataKeyNames 有什么区别?

c# - 当用户通过 Navigation.PushAsync(tabbedPage) 打开时,更改 TabbedPage MainTitle 颜色

c# - 多列的 EF 值转换