我有这个控制器:
[PushHeaderAttribute]
public class ClockController : Controller
{
}
其中PushHeaderAttribute定义如下:
public class PushHeaderAttribute : ResultFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
context.HttpContext.Response.Headers.Remove("Server");
context.HttpContext.Response.Headers.Add("content-encoding", System.Text.Encoding.UTF8.WebName);
context.HttpContext.Response.Headers.Add("connection", "keep-alive ");
base.OnResultExecuting(context);
}
}
调用了该属性,但是在调试时,
context.HttpContext.Response.Headers
列表为空,但是,在监视响应时,所有标头都在那里。
如何正确操作 .NET Core Web 应用程序中的标头?
像
Server
这样的基本标头无法删除,因为它还没有添加到您的场景中,它将添加到Kestrel/IIS的内部管道中
如果您确实想删除“Server”响应头,您可以对 Kestrel(.Net 6 +) 进行如下配置:
builder.WebHost.ConfigureKestrel(op =>
{
op.AddServerHeader = false;
});
对于IIS,你可以参考这篇文章