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

如何为ASP.NET Core中未定义的请求添加默认路由

处理ASP.NET Core未匹配路由的解决方案

你之前添加的中间件未生效,是因为它被放在了app.Run()之后——app.Run()是终端中间件,执行后不会再处理后续代码。针对未匹配路由的场景,以下是几种可行的处理方式:

方案1:使用MapFallback(官方推荐)

ASP.NET Core 3.0+提供了MapFallback方法,专门用于匹配所有未被前面路由规则命中的请求,优先级最低。只需在app.MapControllers();之后添加代码:

app.MapFallback(async context =>
{
    context.Response.StatusCode = StatusCodes.Status404NotFound;
    await context.Response.WriteAsync("Page not found");
});

修改后的完整Program.cs:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.UseStaticFiles();   
app.UseRouting();
app.MapControllers();

// 处理未匹配的请求
app.MapFallback(async context =>
{
    context.Response.StatusCode = StatusCodes.Status404NotFound;
    await context.Response.WriteAsync("Page not found");
});

app.Run();

方案2:通过中间件拦截404响应

调整中间件顺序,在路由处理完成后检查响应状态,处理未匹配的请求。将中间件放在UseRouting()之后、MapControllers()之前:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.UseStaticFiles();   
app.UseRouting();

// 404处理中间件
app.Use(async (context, next) =>
{
    await next(); // 先执行前面的路由和中间件逻辑
    // 仅处理未被响应的404请求
    if (context.Response.StatusCode == StatusCodes.Status404NotFound && !context.Response.HasStarted)
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        await context.Response.WriteAsync("Page not found");
    }
});

app.MapControllers();
app.Run();

方案3:用控制器全局捕获未匹配路由

创建一个错误控制器,添加一个匹配任意路由的Action(设置Order = int.MaxValue确保最后匹配):

using Microsoft.AspNetCore.Mvc;

namespace ControllersExample.Controllers
{
    public class ErrorController : Controller
    {
        // 匹配所有未被其他路由命中的请求
        [Route("{*url}", Order = int.MaxValue)]
        public ContentResult PageNotFound()
        {
            Response.StatusCode = StatusCodes.Status404NotFound;
            return Content("Page not found", "text/plain");
        }
    }
}

无需修改Program.cs,所有未定义的路由都会自动导向这个Action。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:21:01