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

.NET Core 8如何配置多控制器路由以支持SEO友好路径

问题描述

原有的.NET Core 8控制器路由配置如下:

var webApplication = builder.Build();
webApplication.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");

该配置支持以下路由正常访问:

https://example.com
https://example.com/Home
https://example.com/Books
https://example.com/Books/Show/1

现在需要新增支持SEO友好的路由(如https://example.com/Books/Show/my-book-name),同时保留原有路由逻辑,且不想为每个Action单独配置路由。尝试了以下配置但无法正常工作:

var webApplication = builder.Build();
webApplication.MapControllerRoute("default-uri", "{controller}/Show/{uri}");
webApplication.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
解决方案

问题根源

你添加的default-uri路由未指定action参数,路由系统无法匹配到对应的Show方法;同时路由匹配遵循从上到下的优先级顺序,即使参数正确,顺序错误也会导致匹配失败。

可行实现方式

方式一:调整全局路由模板与顺序

将自定义路由放在默认路由之前,并明确指定对应action,确保路由系统能正确匹配到Show方法:

var webApplication = builder.Build();
// 优先匹配带SEO友好URI的路由
webApplication.MapControllerRoute(
    name: "show-with-uri",
    pattern: "{controller}/Show/{uri}",
    defaults: new { action = "Show" }
);
// 保留原有默认路由逻辑
webApplication.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}"
);

方式二:单路由模板兼容ID与URI

通过参数约束让同一个路由模板同时支持数字ID和字符串URI,无需新增额外路由:

var webApplication = builder.Build();
webApplication.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{param:regex(^\\d+$|^[a-z0-9-]+$)?}",
    defaults: new { param = (string?)null }
);

之后在BooksController的Show方法中处理参数:

public IActionResult Show(string? param)
{
    if (int.TryParse(param, out int bookId))
    {
        // 根据数字ID查询书籍
    }
    else if (!string.IsNullOrEmpty(param))
    {
        // 根据URI别名查询书籍
    }
    // 后续业务逻辑
    return View();
}

方式三:属性路由结合全局路由

无需修改全局路由,直接在Action上声明多路由模板,同时支持原有ID路由和新URI路由:

public class BooksController : Controller
{
    [Route("Books/Show/{id:int}")]
    [Route("Books/Show/{uri}")]
    public IActionResult Show(string? id, string? uri)
    {
        var queryKey = id ?? uri;
        // 根据queryKey查询书籍
        return View();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:19