gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:58:39 24 4
gpt4 key购买 nike

我有一个 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com