【发布时间】: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