ASP.NET Core 3.1 JS调用Razor Page跳转后HTTPS变HTTP问题
排查与解决步骤
1. 验证前端生成的URL协议
首先触发按钮点击事件,查看浏览器控制台打印的url日志:
- 若打印的URL前缀为
http://:说明请求到ASP.NET Core runtime时已经是HTTP协议,你看到的地址栏HTTPS是反向代理(IIS、Nginx等)转发的,需要配置转发原始协议头:- 在
Startup.cs的Configure方法开头(所有其他中间件之前)添加转发头中间件:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });- 在
ConfigureServices中添加代理信任配置:
services.Configure<ForwardedHeadersOptions>(options => { options.KnownProxies.Add(IPAddress.Parse("127.0.0.1")); // 替换为你的反向代理实际IP }); - 在
2. 前端URL为HTTPS时的后台配置修复
如果控制台打印的URL确实是https://开头,问题出在后台服务的跳转策略:
- 检查
Configure方法是否启用了HTTPS重定向,需放在路由、认证中间件之前:
app.UseHttpsRedirection();
- 修改Cookie安全策略,生产环境强制使用HTTPS:
// 替换原CookiePolicy中的Secure配置 options.Secure = CookieSecurePolicy.Always;
- 检查
appsettings.json中微软身份认证的回调地址配置,确保所有回调地址均为HTTPS协议,避免认证跳转时降级为HTTP。
3. Razor Page返回逻辑修正
你当前的OnPostBatchReport方法直接返回字符串,form提交后浏览器会直接展示该字符串,地址栏会保留提交的原始URL。如果后续需要跳转至报表页面,不要硬编码绝对地址,使用框架提供的RedirectToPage等方法生成相对路径地址,框架会自动适配正确的协议。
内容的提问来源于stack exchange,提问作者SoftwareDveloper
相关产品推荐
相关产品推荐

