第四章 路由系统详解

4.1 路由基础

路由的定义与作用

路由是将HTTP请求映射到控制器动作方法的机制。它决定了哪个控制器和动作方法将处理特定的HTTP请求。ASP.NET Core的路由系统具有以下作用:

  1. URL与代码的解耦:URL不直接反映物理文件结构
  2. 可读性和SEO友好:创建简洁、描述性的URL
  3. 版本控制:支持API版本化
  4. 灵活性:允许自定义URL模式和参数

属性路由详解

使用[Route]特性可以定义控制器和动作方法的路由模板:

[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    // 路由: GET api/products
    [HttpGet]
    public IActionResult GetAll() { ... }

    // 路由: GET api/products/5
    [HttpGet("{id}")]
    public IActionResult GetById(int id) { ... }
}

在上面的例子中:

  • [controller]是一个令牌,会被控制器名称(不含"Controller"后缀)替换
  • {id}是路由参数,会被URL中的值捕获并传递给方法参数

4.2 路由约束

路由约束限制路由参数可以匹配的值:

// 仅匹配id为整数的路由
[HttpGet("{id:int}")]
public IActionResult GetById(int id) { ... }

// 仅匹配符合正则表达式的路由
[HttpGet("{sku:regex(^[a-zA-Z0-9]{6}$)}")]
public IActionResult GetBySku(string sku) { ... }

常用的路由约束:

约束 示例 匹配 不匹配
int {id:int} 123 abc, 123.45
bool {flag:bool} true, false yes, 1
datetime {date:datetime} 2023-07-15 july 15
decimal {price:decimal} 123.45 abc
min(value) {id:min(1)} 1, 2, 3 0, -1
max(value) {id:max(10)} 1, 10 11, 20
minlength(value) {name:minlength(2)} ab, abc a
regex(expression) {sku:regex(^[a-z]{3}$)} abc ab, abcd

wechat_2025-07-31_105805_938


posted @ 2025-08-01 09:27  高宏顺  阅读(272)  评论(0)    收藏  举报