我对最小 API 的概念还很陌生,但是 the documentation seems quite clear 。您只需使用 Results 或 TypedResults 返回您想要的响应代码。
所以我做了一个非常基本的尝试:
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
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 之外什么都得不到?
最佳答案
这里有两个问题:
您忘记使用
return
:app.MapPost("/api/test", async context => { var form = await context.Request.ReadFormAsync(); var file = form.Files["File"]; return Results.NoContent(); });
异步处理程序仅接受
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/