C# ASP.NET Core中的路由(Routing)配置 - 从约定到特性的路由

来源:这里教程网 时间:2026-02-21 17:35:35 作者:

在 ASP.NET Core 中,路由(Routing)是将传入的 HTTP 请求映射到控制器中的具体操作方法的过程。它决定了 URL 如何被解析和处理。ASP.NET Core 提供了两种主要方式来配置路由:约定式路由(Conventional Routing)和特性路由(Attribute Routing)。了解它们的区别和使用场景,有助于构建清晰、可维护的 Web API 或 MVC 应用。

约定式路由(Conventional Routing)

约定式路由是在应用启动时通过全局模式定义的,通常在 Program.csStartup.cs 中配置。它适用于传统的 MVC 模式,强调统一的 URL 结构。

例如,在 Program.cs 中添加如下代码:

builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();

app.UseRouting();

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

上述配置表示:

默认访问 /Home/Index URL 格式为:/Controller/Action/Id Id 是可选参数

这种模式适合页面驱动的应用,如后台管理系统,URL 规律性强,易于维护。

特性路由(Attribute Routing)

特性路由通过在控制器或操作方法上使用属性来定义路由,更加灵活,特别适合构建 RESTful 风格的 Web API。

启用特性路由只需在控制器上添加 [Route] 特性:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet] // GET: api/products
public IActionResult Get() => Ok(new[] { "product1", "product2" });

[HttpGet("{id}")] // GET: api/products/5
public IActionResult GetById(int id) => Ok($"Product {id}");

[HttpPost] // POST: api/products
public IActionResult Create([FromBody] string name) => CreatedAtAction(nameof(GetById), new { id = 1 }, name);
}

关键点:

[controller] 自动替换为控制器名称(去掉 Controller 后缀) 支持组合使用类级别和方法级别的路由 可精确控制每个端点的 URL 路径和 HTTP 方法

混合使用约定与特性路由

你可以在同一个项目中同时使用两种方式。MVC 页面用约定路由,API 接口用特性路由。

确保调用 MapControllers() 来启用特性路由:

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

app.MapControllers(); // 启用所有使用 [ApiController] 和路由特性的控制器

这样,带特性的控制器会优先按属性路由匹配,其余走默认约定。

路由约束与可选参数

无论是哪种方式,都可以添加约束来限制参数格式:

{id:int} —— 只匹配整数 {name:alpha} —— 只匹配字母 {date:datetime} —— 匹配日期时间 {id?} —— 表示参数可选

例如:

[HttpGet("users/{id:int:min(1)}")]
public IActionResult GetUser(int id)
{
// 只接受大于等于1的整数 id
}

基本上就这些。根据项目类型选择合适的路由方式:页面为主的系统可用约定式,API 服务推荐特性路由,现代项目往往以特性路由为主,更直观、可控。不复杂但容易忽略的是顺序和组合使用的方式,合理配置才能避免冲突。

相关推荐