ASP.NET Core自定义404页面触发无限重定向循环问题求助
问题根因
- 服务配置未注册MVC控制器:你在
ConfigureServices中仅添加了AddRazorPages(),没有注册控制器相关服务,同时端点配置仅映射了Razor Pages路由,未映射控制器路由,导致访问/Error路径下的控制器接口直接返回404,触发二次错误处理 - 状态码处理逻辑重复冲突:同时使用了自定义404处理中间件和
UseStatusCodePagesWithRedirects,两类逻辑重复执行 - 重定向路径与控制器路由不匹配:你的Error控制器路由为
/Error/{statusCode},但你配置的重定向路径为/Error,未携带状态码参数,无法命中Action,返回404触发循环 - Error控制器代码存在语法错误:
ViewBag.ErrorMessage是动态属性,你误写为方法调用格式,会触发服务端500错误,进一步加重错误循环
修复步骤
- 修改
ConfigureServices服务注册,添加控制器支持
public void ConfigureServices(IServiceCollection services) { //Register dependencies services.AddRazorPages(); // 新增:注册MVC控制器服务 services.AddControllersWithViews(); }
- 清理
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?}"); }); }
- 修复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
相关产品推荐
相关产品推荐

