【问题标题】:Kestrel returns empty response to HttpContextKestrel 向 HttpContext 返回空响应
【发布时间】:2020-11-25 18:50:57
【问题描述】:

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

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

namespace HiStackOverflow
{
    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/,应用程序会运行代码以发送响应(断点被命中,并且“写入响应”被写入控制台),但是,我收到一个空响应。特别是 Chrome 中的 ERR_EMPTY_RESPONSE。

如果我尝试在 Postman 中查看响应,我会收到“Socket hang up”错误。

我无法弄清楚为什么会这样。这是我第一次尝试从头开始设置 Kestrel 实例,所以如果有人能对这个问题有所了解,那将是一个巨大的帮助。谢谢!

【问题讨论】:

  • 您的代码是服务器。当您使用浏览器连接时,您正在向您的服务器发送请求。服务器然后将响应发送回浏览器,这是一个 html 消息。您正在将文本发送回浏览器。
  • @jdweng 我的印象是“a”,在这种情况下,HttpContext 是作为来自浏览器的传入请求的一部分形成的吗?
  • 感谢您的回复。不幸的是,我仍然收到一个空的回复。我不认为这是响应的格式,因为您可以发送的不仅仅是 HTML。我也在 Postman 中尝试过,我收到以下错误:Socket hang up.
  • 是的,完全没有回应。没有返回 HTTP 代码,实际上是 0 个字节。谢谢,我现在去看看。
  • 根据本文档,这是为 Web 服务器实现设置服务器的方法docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…

标签: c# http asp.net-core kestrel-http-server


【解决方案1】:

您正在调用UseStartup&lt;Startup&gt;(),但您没有发布Startup 课程代码。如果我从您的示例中删除它,它就可以正常工作。

另外,您正在调用 HttpContext.Response.WriteAsync(),它返回一个 Task(它是异步的)。
你应该像这样等待它:

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

【讨论】:

  • 太棒了,这解决了我的问题。谢谢!我不确定为什么包含 Startup 会影响它?我去看看。
  • 这取决于你的启动代码。您可能正在使请求处理管道或其他东西短路......
猜你喜欢
  • 1970-01-01
  • 2020-01-18
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2017-08-13
相关资源
最近更新 更多