c# - 从 C# 6 中的响应 header 中删除 SERVER

标签 c# .net-6.0 kestrel-http-server response-headers

我有一个 .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。确保在调用生成 appBuild 之前设置 Kestrel 选项。


Documentation KestrelServerOptions.AddServerHeader 属性可在线获取。

关于c# - 从 C# 6 中的响应 header 中删除 SERVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75126827/

相关文章:

asp.net - 访问 linux 托管的 ASP.NET Core 2.x webapp(无 nginx)

c# - 请求用@variable替换列名

c# - 从 Net Core 3.1 迁移到 Net 6 期间,以下方法或属性之间的调用不明确

c# - 使用int.TryParse C#时发生编译错误

c# - .NET 6 工作线程服务停止时出现错误

SignalR 核心 Apache WS 意外响应代码 : 200

ssl - Visual Studio 2017 启用 SSL

c# - 带有滚动背景图像的 ListView

c# - 生成用户友好的 URL