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");
}
)
)
我已经在控制台应用程序中设置了一个基本的 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");
}
)
)