c# - 无法在 ASP.NET Core 6 中设置响应 header "Connection"

标签 c# asp.net-core-webapi keep-alive kestrel-http-server asp.net-core-6.0

我有一个 ASP.NET Core 6 Web API,并且需要在某些情况下设置 Connection: Close header ,以便将某些旧终端(客户端)置于维护模式。

我通常可以设置 header ,但 Connection: Close header 会被删除,并且不是响应的一部分。

这是我的 Controller :

[ApiController]
[Route("[controller]")]
public class HeaderTestController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        Response.Headers.Add("Foo", "Bar");           // part of the response
        Response.Headers.Add("Connection", "close");  // NOT part of the response

        return NoContent();
    }
}

这就是我的 Program.cs 的样子:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

当我调用 API 方法时,它返回 foo header ,但省略 Connection header :

enter image description here

知道哪个组件正在删除 Connection header 以及如何绕过它?

最佳答案

检查HttpProtocol.cs中的方法CreateResponseHeaders 。它正在此处删除此 header 。而且我认为没有任何方法可以绕过它。

并且仅当客户端发出 http/2 或 http/3 请求时才会删除此内容。如果您的旧客户端仍在使用 http/1.1,那么它不会被删除。

希望这有帮助。

关于c# - 无法在 ASP.NET Core 6 中设置响应 header "Connection",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73433302/

相关文章:

c# - Entity Framework 6.2 将多对多从一个 DbContext 复制到另一个 DbContext

c# - .NET WebAPI : throwing Bad Request instead of returning it

asp.net - 为什么我的 ASP.NET 页面返回 `200 OK` 而没有发送任何身份验证 header ?

ajax - ajax 应用程序中 Internet Explorer 11 的保活问题

c# - 找不到类型或命名空间名称 'type/namespace'.. - Asp.Net - C#

c# - 跨应用程序的表单例份验证没有 cookie

c# - Entity Framework 在 View 中选择了太多列

c# - Asp Net Core Web 推送通知

c# - 从 asp.net Controller 中删除 Try/Catch 语句

android - 当我强行关闭我的应用程序时服务停止。我怎样才能使服务保持不变?