我有一个 .net 6.0 C# API(使用 Kestrel 服务器在 Mac 上开发),它在响应 header 中返回服务器。我尝试过的所有解决方案均适用于 6 年级之前的学生,不再适用。
我已经在我的Program.cs中尝试过这个:
app.Use((ctx, next) => {
var headers = ctx.Response.Headers;
headers.Add("X-Frame-Options", "DENY");
headers.Add("X-XSS-Protection", "1; mode=block");
headers.Add("X-Content-Type-Options", "nosniff");
headers.Add("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
headers.Remove("Server");
return next();
});
这不会删除服务器,但会添加其他 header 。如果我添加带有空格的服务器属性(例如 headers.Add("Server", "");
),则不会显示服务器名称 (Kestrel),但 header 属性仍然会出现。这可能达到了目的,但我宁愿它根本不出现。
建议ChatGPT(我知道,但我尝试了它作为最后的手段)
var host = new WebHostBuilder().UseKestrel(options => options.AddServerHeader = false).UseStartup<StartupBase>().Build();
但这给出了运行时错误无法实例化服务类型“Microsoft.AspNetCore.Hosting.IStartup”的实现类型“Microsoft.AspNetCore.Hosting.StartupBase”。。
作为一个不太重要的附带问题,由于删除服务器是最佳实践,我想知道为什么默认功能是包含它而不是省略它。难道不应该有责任添加它吗?包含该值的用例是什么?
最佳答案
正确的语法是:
builder.WebHost.UseKestrel(option => option.AddServerHeader = false);
builder
变量在 Visual Studio 生成的默认模板中可用。
在默认模板中,生成为:
var builder = WebApplication.CreateBuilder(args);
其中args
是传递给Main
方法的参数。然后,builder
用于生成 app
。确保在调用生成 app
的 Build
之前设置 Kestrel 选项。
Documentation KestrelServerOptions.AddServerHeader
属性可在线获取。
关于c# - 从 C# 6 中的响应 header 中删除 SERVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75126827/