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(); }); }
额外优化说明
- 代码中已存在
app.UseHttpsRedirection();,该中间件已经负责将HTTP请求重定向到HTTPS,因此context.Request.Scheme = "https";这行可以移除,让HttpsRedirection中间件统一处理HTTPS强制跳转,保持逻辑单一。 - 重定向完成后返回
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
相关产品推荐
相关产品推荐

