Kestrel returns 对 HttpContext 的空响应

Kestrel returns empty response to HttpContext

我已经在控制台应用程序中设置了一个基本的 Kestrel 实例,如下所示:

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

namespace HiWhosebug
{
    class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .UseUrls("http://localhost:5001")
                .Configure(c =>
                    c.Run(a =>
                        {
                            Console.WriteLine("writing response");
                            return a.Response.WriteAsync("Hello world");
                        }
                    )
                )
                .Build();
            
            host.Start();
            
            Console.WriteLine("Host setup finished, continuing with program.");
            Console.ReadLine();
        }
    }
}

如果我随后在 Web 浏览器中导航到 http://localhost:5001/,应用程序将运行代码以发送响应(命中断点,并将“写入响应”写入控制台),但是,我收到一个空洞的回应。具体来说 ERR_EMPTY_RESPONSE 在 Chrome.

如果我尝试在 Postman 中查看响应,我会收到“套接字挂起”错误。

我不明白为什么会这样。这是我第一次尝试从头开始设置 Kestrel 实例,所以如果有人能阐明这个问题,那将是一个巨大的帮助。谢谢!

您正在调用 UseStartup<Startup>(),但您没有 post Startup class 代码。如果我从您的示例中删除它,它就可以正常工作。

此外,您正在调用 HttpContext.Response.WriteAsync() 哪个 returns 任务(它是异步的)。
你应该这样等待它:

.Configure(c =>
    c.Run(async a =>
        {
            Console.WriteLine("writing response");
            await a.Response.WriteAsync("Hello world");
        }
    )
)