第四章 路由系统详解
4.1 路由基础
路由的定义与作用
路由是将HTTP请求映射到控制器动作方法的机制。它决定了哪个控制器和动作方法将处理特定的HTTP请求。ASP.NET Core的路由系统具有以下作用:
- URL与代码的解耦:URL不直接反映物理文件结构
- 可读性和SEO友好:创建简洁、描述性的URL
- 版本控制:支持API版本化
- 灵活性:允许自定义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 |


浙公网安备 33010602011771号