You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC中RequireHttpsAttribute引发ERR_TOO_MANY_REDIRECTS问题求助

解决ASP.NET Core 2.0 MVC在IIS上的HTTPS循环重定向问题

这种ERR_TOO_MANY_REDIRECTS的循环重定向问题我在部署ASP.NET Core站点时碰到好多次了,大概率是IIS和ASP.NET Core的重定向逻辑冲突,或者反向代理头没配置对,咱们一步步来排查解决:

1. 先检查反向代理头配置(最常见诱因)

因为你用IIS作为反向代理而非直接暴露Kestrel,Kestrel收到的其实是IIS转发的HTTP请求。如果没正确配置转发头,Kestrel会误以为当前请求是HTTP,触发重定向到HTTPS;而IIS又把HTTPS请求转成HTTP发给Kestrel,直接形成循环。

在Startup.cs里补充转发头配置:

  • 在ConfigureServices方法中添加:
services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 服务器在本地的话,添加回环IP到信任列表
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
});
  • 在Configure方法中,必须把UseForwardedHeaders放在UseHttpsRedirection之前:
app.UseForwardedHeaders();
app.UseHttpsRedirection();
// 其他中间件比如UseMvc放在后面
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

2. 排查是否存在双重重定向配置

你已经在Startup.cs里配置了自动重定向,要确保IIS里没有重复设置:

  • 打开IIS管理器,找到你的站点,检查HTTP重定向功能是否启用,若是直接禁用;
  • 检查URL重写模块里是否手动添加了HTTP到HTTPS的重写规则,如有则禁用或删除,避免和代码逻辑冲突。

3. 验证HTTPS端口与绑定一致性

确保代码里的HTTPS端口和IIS的SSL绑定完全匹配:
在ConfigureServices的AddHttpsRedirection里明确指定端口为443:

services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
    options.HttpsPort = 443;
});

同时检查IIS站点绑定:确认443端口绑定了正确的Let's Encrypt证书,80端口仅绑定HTTP(无SSL证书),主机名和站点域名一致。

4. 检查HSTS配置是否过度严格

如果你在代码里启用了HSTS(app.UseHsts();),注意:

  • 不要随意设置includeSubDomains参数,除非所有子域名都配置了有效SSL证书;
  • 开发环境下禁用HSTS,避免本地测试时缓存导致的异常(可以用if (!env.IsDevelopment()) { app.UseHsts(); }做环境判断)。

5. 用浏览器工具追踪重定向链

打开Chrome开发者工具(F12),切换到Network标签,勾选“Preserve log”后刷新页面:

  • 如果看到请求在http://xxx和https://xxx之间来回跳转,基本就是反向代理头没配置对;
  • 如果跳转URL包含错误端口或主机名,立刻检查绑定和端口配置。

内容的提问来源于stack exchange,提问作者Sha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:14:54