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

ASP.NET Core MVC 404错误时重定向功能失效问题求助

ASP.NET Core MVC 自定义404页面重定向解决方案

原代码问题分析

你当前的代码存在几个关键问题导致无法生效:

  1. EnteredPath未声明,会直接引发编译错误;
  2. context.Request.HttpContext.Request.Path属于冗余调用,直接使用context.Request.Path即可;
  3. 第一次调用await next()后,响应状态已被设置为404,此时响应可能已开始发送,再修改请求路径重新执行next(),中间件管道无法正确重新路由到目标Action,甚至会触发响应已启动的异常。

推荐解决方案(使用内置错误处理中间件)

ASP.NET Core提供了专门的错误处理中间件UseStatusCodePagesWithReExecute,能更安全可靠地处理404这类状态码跳转,是MVC项目的首选方案。

1. 修改Program.cs配置

将错误处理中间件放在路由配置之前:

// 配置状态码重定向,{0}会自动传入状态码(如404)
app.UseStatusCodePagesWithReExecute("/URL/checkRawUrl", "?statusCode={0}");

// 后续路由配置保持不变
app.UseRouting();

app.UseAuthorization();

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

2. 完善URL控制器的Action方法

在URLController中接收状态码参数,返回自定义404视图:

public class URLController : Controller
{
    public IActionResult checkRawUrl(int? statusCode)
    {
        // 确保响应状态码保持404,避免返回200影响搜索引擎判断
        if (statusCode == 404)
        {
            Response.StatusCode = 404;
        }
        
        // 返回自定义404视图,确保Views/URL/NotFound.cshtml或Views/Shared/NotFound.cshtml存在
        return View("NotFound");
    }
}

自定义中间件修正方案(若坚持使用自定义逻辑)

如果一定要用自定义中间件,需确保在响应未启动时重置请求上下文:

app.Use(async (context, next) =>
{
    // 记录原始请求路径
    var enteredPath = context.Request.Path.ToString().TrimStart('/');
    
    await next();
    
    // 仅在响应未启动且状态码为404时处理
    if (context.Response.StatusCode == 404 && !context.Response.HasStarted)
    {
        // 清空当前响应
        context.Response.Clear();
        // 修改请求路径指向自定义Action
        context.Request.Path = "/URL/checkRawUrl";
        // 重新执行中间件管道
        await next();
    }
});

注意:此中间件必须放在UseRouting()之前才能生效。


额外注意事项

  • 确保自定义404视图(如NotFound.cshtml)已创建,可放在Views/URL/目录或Views/Shared/目录(全局共享);
  • 若/URL/checkRawUrl路径无法被路由识别,检查默认路由配置是否覆盖了该路径,必要时可添加单独的路由规则:
    app.MapControllerRoute(
        name: "404",
        pattern: "URL/checkRawUrl",
        defaults: new { controller = "URL", action = "checkRawUrl" });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:46:43