Blazor路由约束在@page指令中通过“{参数:约束}”语法实现,如{ id:int },确保URL参数类型匹配且路由阶段即过滤无效请求;约束类型包括int、guid、regex等,且组件Parameter属性类型须与约束严格一致。

Blazor 用路由约束来确保 URL 中的参数满足特定类型或格式要求,避免无效值进入组件逻辑。它不是运行时校验,而是在路由匹配阶段就起作用——不满足约束的 URL 根本不会命中该页面组件,而是交给 <notfound></notfound> 处理。
怎么写路由约束
在 @page 指令的占位符后加冒号和约束类型,比如:
-
@page "/user/{id:int}"—— 只匹配/user/123,不匹配/user/abc -
@page "/product/{sku:guid}"—— 要求sku是合法 GUID 格式 -
@page "/post/{year:int}/{month:int?}/{day:int?}"—— 支持年份必填、月日可选,且都必须是整数
支持的内置约束类型
Blazor 内置以下常用约束(不区分大小写):
-
int:整数(含负数) -
long:64 位整数 -
bool:仅接受true或false(不区分大小写) -
datetime:符合 ISO 8601 格式(如2025-12-12或2025-12-12T15:04:00) -
decimal、double、float:数值类型 -
guid:标准 32 位 GUID(带或不带连字符均可) -
minlength(n)、maxlength(n)、length(n):字符串长度限制 -
regex(正则表达式):例如{code:regex(^A\d{3}$)}匹配以 A 开头、后跟三位数字的字符串
参数类型必须严格对应
约束不仅影响路由匹配,还决定组件中 [Parameter] 属性的类型声明:
- 写了
{id:int},组件里就得用public int Id { get; set; } - 如果写成
string Id,编译会通过,但运行时 Blazor 无法自动转换,参数值为空或默认值(如 0) - 可空类型也支持,比如
int?对应{id:int?},此时 URL 中省略该段(如/user)也能匹配
可选参数与约束共存
可选参数用 ? 表示,放在参数名后、约束前:
-
@page "/search/{q?}/{page:int?}"——q和page都可省略,且page必须是整数或不存在 - 注意顺序:
{page:int?}合法,{page? :int}语法错误 - 当参数未提供时,对应属性值为类型的默认值(
int?是null,string是null)
基本上就这些。约束让路由更健壮,也减少了手动解析和校验的代码量,但得记住:它只管“能不能进这个页面”,不管“进了之后逻辑对不对”。


















