知道为什么 foo returns 是空的吗?

Any idea why foo returns empty body?

出于某种原因,foo 总是 returns 空主体:

internal static async Task<string> Foo(HttpContext context)
{
    var response = await Task.Run(() => { return "response"; });
    return response;
}

internal static async Task<string> Bar(HttpContext context, string someParam)
{
    var response = await Task.Run(() => { return "response"; });
    return response;
}

也许您必须等待任务完成才能查看返回的 TaskResult 属性 中设置的内容实例.

我在控制台应用程序中编写了几乎相同的代码(没有 HttpContext 参数),我注意到当您使用 Result 属性 在你的代码中,你的 Foo() 方法返回的结果就在那里。可能触发任务等待完成

Link: https://www.pluralsight.com/guides/using-task-run-async-await

我能够重现该行为 - 在单独的方法中使用单个参数 HttpContext 移动处理程序会导致空响应:

WebApplicationBuilder builder = WebApplication.CreateBuilder();
WebApplication app = builder.Build();
app.Map("/Fails", Fails);
app.Map("/Fails1", Fails1);
app.Map("/Works", async (HttpContext c) =>
{
    var response = await Task.Run(() => { return "response"; });
    return response;
});
app.Map("/WorksToo", Works);
app.Map("/WorksToo1", Works1);
app.Map("/WorksToo2", Works2);
app.Run();
static async Task<string> Fails1(HttpContext context)
{
    var response = await Task.FromResult("response");
    return response;
}
public partial class Program
{
    internal static async Task<string> Fails(HttpContext context) => await Task.FromResult("response");

    internal static async Task<string> Works(HttpContext context, string someParam) => await Task.FromResult("response");

    internal static async Task<string> Works1(HttpContext context, ILogger<Program> _) => await Task.FromResult("response");

    internal static async Task<string> Works2(HttpRequest context) => await Task.FromResult("response");
}

github 上发布了新问题。现在,您可以像我对 Works1.

那样向处理程序添加虚拟参数

这已被确认为框架错误,将在 .NET 7.0 中修复。 与此同时,我正在向处理程序添加一个虚拟参数。