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

ASP.NET Core自定义404页面触发无限重定向循环问题求助

问题根因
  • 服务配置未注册MVC控制器:你在ConfigureServices中仅添加了AddRazorPages(),没有注册控制器相关服务,同时端点配置仅映射了Razor Pages路由,未映射控制器路由,导致访问/Error路径下的控制器接口直接返回404,触发二次错误处理
  • 状态码处理逻辑重复冲突:同时使用了自定义404处理中间件和UseStatusCodePagesWithRedirects,两类逻辑重复执行
  • 重定向路径与控制器路由不匹配:你的Error控制器路由为/Error/{statusCode},但你配置的重定向路径为/Error,未携带状态码参数,无法命中Action,返回404触发循环
  • Error控制器代码存在语法错误:ViewBag.ErrorMessage是动态属性,你误写为方法调用格式,会触发服务端500错误,进一步加重错误循环
修复步骤
  1. 修改ConfigureServices服务注册,添加控制器支持
public void ConfigureServices(IServiceCollection services)
{
    //Register dependencies
    services.AddRazorPages();
    // 新增:注册MVC控制器服务
    services.AddControllersWithViews();
}
  1. 清理Configure中重复的状态码处理逻辑,替换为服务端重执行的错误处理配置
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // 删除你之前写的自定义404中间件和UseStatusCodePagesWithRedirects
        // 新增:异常处理页配置
        app.UseExceptionHandler("/Error/500");
        // 新增:状态码页使用服务端重执行,不会触发客户端重定向,避免循环
        app.UseStatusCodePagesWithReExecute("/Error/{0}");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        // 新增:映射控制器路由
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
  1. 修复Error控制器的语法错误
public class ErrorController : Controller
{
    [Route("/Error/{statusCode}")]
    public IActionResult HttpStatusCodeHandler(int statusCode)
    {
        switch (statusCode)
        {
            case 404:
                System.Diagnostics.Debug.WriteLine("bah");
                // 修正:属性赋值而非方法调用
                ViewBag.ErrorMessage = "Resource could not be found.";
                // 直接返回Error文件夹下的404页面
                return View("~/Error/404.cshtml");
            case 500:
                return View("~/Error/500.cshtml");
        }
        return View("Error");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:24:01