dan*_*elc 3 c# response-headers kestrel-http-server .net-6.0
我有一个 .net 6.0 C# API(使用 Kestrel 服务器在 Mac 上开发),它在响应标头中返回服务器。我尝试过的所有解决方案均适用于 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();
});
Run Code Online (Sandbox Code Playgroud)
这不会删除服务器,但会添加其他标头。如果我添加带有空格的服务器属性(例如headers.Add("Server", "");),则不会显示服务器名称 (Kestrel),但标头属性仍然会出现。这可能达到了目的,但我宁愿它根本不出现。
ChatGPT(我知道,但我尝试了它作为最后的手段),建议
var host = new WebHostBuilder().UseKestrel(options => options.AddServerHeader = false).UseStartup<StartupBase>().Build();
Run Code Online (Sandbox Code Playgroud)
但这给出了运行时错误无法实例化服务类型“Microsoft.AspNetCore.Hosting.IStartup”的实现类型“Microsoft.AspNetCore.Hosting.StartupBase”。。
作为一个不太重要的附带问题,由于删除服务器是最佳实践,我想知道为什么默认功能是包含它而不是省略它。难道不应该有责任添加它吗?包含该值的用例是什么?
使用的正确语法是:
builder.WebHost.UseKestrel(option => option.AddServerHeader = false);
Run Code Online (Sandbox Code Playgroud)
该builder变量在 Visual Studio 生成的默认模板中可用。
在默认模板中,它生成为:
var builder = WebApplication.CreateBuilder(args);
Run Code Online (Sandbox Code Playgroud)
其中args是传递给方法的参数Main。然后builder稍后使用 来生成app. 确保在调用Build生成 .kestrel 文件之前设置 Kestrel 选项app。
该房产的文件KestrelServerOptions.AddServerHeader可在线获取。
| 归档时间: |
|
| 查看次数: |
5402 次 |
| 最近记录: |