Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UseHsts不与NetCore 2.1网站配合使用_C#_Asp.net Core - Fatal编程技术网

C# UseHsts不与NetCore 2.1网站配合使用

C# UseHsts不与NetCore 2.1网站配合使用,c#,asp.net-core,C#,Asp.net Core,我按照上的说明配置UseHsts,但是当我访问我的网站时,我没有看到Strict Transport Security标题。我尝试了几种不同的配置,但似乎没有任何影响。你知道我遗漏了什么吗 public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddHsts(options => { }); services.AddHttp

我按照上的说明配置UseHsts,但是当我访问我的网站时,我没有看到Strict Transport Security标题。我尝试了几种不同的配置,但似乎没有任何影响。你知道我遗漏了什么吗

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddHsts(options =>
    {
    });

    services.AddHttpsRedirection(options =>
    {
    });            
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseHsts();
    app.UseHttpsRedirection();
    app.UseMvc();
}
这是我在Chrome中得到的标题图像,但在其他浏览器中看起来也一样


UseHsts不包括以下环回主机:

  • localhost:IPv4环回地址
  • 127.0.0.1:IPv4环回地址
  • [::1]:IPv6环回地址
您可以尝试发布web应用程序并检查标题严格的传输安全性

下面是将站点发布到Azure的结果


我在ASP.NET Core 2.2应用程序中遇到了相同的问题。不需要在AddHsts()方法中显式设置最大年龄:

显式地将Strict Transport Security标头的max age参数设置为60天。如果未设置,则默认为30天。有关更多信息,请参阅“最大年龄”指令

但是,通过自己设置,我成功地将标题添加到响应中

在Startup.cs中的ConfigureServices()

if(!this.Environment.IsDevelopment())
{
var currentDate=DateTime.Now;
services.AddHsts(opt=>
{
opt.MaxAge=currentDate.AddYears(1)-currentDate;
opt.IncludeSubDomains=true;
});
}
在Startup.cs中的配置()

if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.ConfigureExceptionHandler(loggerFactory);
app.UseHsts();
}
我托管的应用程序中的响应头示例:


注意:我在我的web.config中明确添加的其他响应标题。

这可能与此相关,但我遇到了相同的问题,当时我使用middlewared的顺序错误。此配置启用了响应标头:

app.UseForwardedHeaders();
app.UseHsts();

当然,
services.AddHsts(…)
也很容易被忽略。

同样的问题,我遇到了HstsMiddleWare测试代码,发现它很有用

正如前面的回答中提到的,UseHsts方法排除了环回主机,但是您可以通过调用ExcludedHosts属性的clear方法来清除此列表

        services.AddHsts(options =>
        {
            options.ExcludedHosts.Clear();
            options.Preload = true;
            options.IncludeSubDomains = true;
            options.MaxAge = TimeSpan.FromDays(60);
        });

注意:这是为了在本地测试HST,但正如Microsoft官方文档中所述,不建议在开发中启用此功能“

我终于将我的应用部署到PCF Azure,并且标题仍然没有显示。我想你没有别的想法了。你能试着用内置的Asp.Net核心MVC模板做一个测试吗?另外,请尝试
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)我尝试手动设置CompatibilityVersion.Version\u 2\u 1,但没有改变任何内容。此外,我使用VS模板创建了一个新的2.1应用程序。我在那里看到了所有设置HST的代码,但它仍然没有生成头。这是在将它部署到PCF之后,这样它就不会使用localhost,并且我将ASPNETCORE_环境更改为开发以外的环境,以便启用hsts。@Eric您使用哪个浏览器访问发布的网站?你能给我们分享一个关于请求和结果的屏幕截图吗?你应该以文本而不是图像的形式添加代码,这让我省去了几个小时的挫败感。除非连接是HTTPS(有意义),否则不会应用HSTS,在TLS终止负载平衡器后面,
UseForwardedHeaders
是知道连接是HTTPS的唯一方法。