ASP.NET Core 6 MVC发布后登录失效,移除UseHsts解决后存疑
保留ASP.NET Core 6 MVC中UseHsts功能的可行方案
我开发了一款设备管理的ASP.NET Core 6 MVC应用,通过Visual Studio 2022脚手架搭建登录系统,连接本地数据库后,用Web Deploy发布到搭载.NET Core宿主的Windows 10 IIS 7上。本地测试时登录功能正常,但发布后通过8080端口登录失败,排查后发现是App.UseHsts()导致应用启动故障,移除该行代码后问题解决,想找到保留UseHsts功能的可行方案。
相关代码片段:
if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); }
以下是几种保留UseHsts功能的方案:
- 排除特定HTTP端口/主机
HSTS核心是强制客户端用HTTPS访问,8080作为HTTP端口会触发强制跳转逻辑导致异常。可通过配置UseHsts的排除规则,跳过本地8080端口的HSTS强制:
if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(options => { options.ExcludedHosts.Add("localhost:8080"); // 可根据实际情况添加其他需要排除的主机或端口 }); }
在IIS中配置HTTPS绑定
如果生产环境需要启用HSTS,建议直接在IIS上配置HTTPS绑定(使用标准443端口),并申请有效的SSL证书。这样应用通过HTTPS对外提供服务,HSTS可正常生效,同时避免HTTP端口带来的冲突问题。自定义HSTS参数配置
根据生产场景需求,调整HSTS的参数,比如修改缓存时长、是否包含子域名、是否加入预加载列表等,让配置更贴合实际业务:
app.UseHsts(options => { options.MaxAge = TimeSpan.FromDays(30); // 自定义缓存时长 options.IncludeSubDomains = true; // 对所有子域名生效 options.Preload = true; // 加入HSTS预加载列表 });
内容的提问来源于stack exchange,提问作者Tanguy LEBRET
相关产品推荐
相关产品推荐

