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

ASP.NET Core 6.0 MVC:Program.cs全局重定向至Coming Soon页面报错解决

解决重定向无限循环问题

问题原因

你当前的中间件会对所有非开发环境的请求执行重定向到/ComingSoon,包括用户被重定向后发起的/ComingSoon请求。这就导致浏览器不断被重复重定向,最终触发redirected too many times错误。

修复方案

在重定向逻辑中添加判断:如果当前请求的路径已经是/ComingSoon,则跳过重定向,直接执行后续中间件流程。

修改后的重定向中间件代码如下:

if (!app.Environment.IsDevelopment())
{
    app.Use((context, next) =>
    {
        // 仅当请求路径不是ComingSoon时才执行重定向
        if (!context.Request.Path.Equals("/ComingSoon", StringComparison.OrdinalIgnoreCase))
        {
            context.Request.Scheme = "https";
            context.Response.Redirect("/ComingSoon");
            return Task.CompletedTask; // 重定向后无需继续执行后续中间件
        }
        return next();
    });
}

额外优化说明

  1. 代码中已存在app.UseHttpsRedirection();,该中间件已经负责将HTTP请求重定向到HTTPS,因此context.Request.Scheme = "https";这行可以移除,让HttpsRedirection中间件统一处理HTTPS强制跳转,保持逻辑单一。
  2. 重定向完成后返回Task.CompletedTask,避免不必要的后续中间件执行,节省资源。

修改后的完整Program.cs关键片段

// ... 其他代码保持不变

app.UseAuthorization();

app.Use((context, next) =>
{
    if (context.Request.Headers["X-Forwarded-Proto"] == "https")
    {
        context.Request.Scheme = "https";
    }
    return next();
});

if (!app.Environment.IsDevelopment())
{
    app.Use((context, next) =>
    {
        if (!context.Request.Path.Equals("/ComingSoon", StringComparison.OrdinalIgnoreCase))
        {
            context.Response.Redirect("/ComingSoon");
            return Task.CompletedTask;
        }
        return next();
    });
}            

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:40