前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Blazor-路由模板(下)

Blazor-路由模板(下)

作者头像
MaybeHC
发布2025-03-06 08:21:57
发布2025-03-06 08:21:57
3900
代码可运行
举报
文章被收录于专栏:技术之路技术之路
运行总次数:0
代码可运行

路由约束

类型约束

我们这里使用{id:int}限制路由,id为int类型,并且路由参数 id 对应的 Id 属性也必须是 int 类型。我们试试能否正常访问

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage/{id:int}"
<h3>demoPage</h3>
<h2>路由参数Id:@Id</h2>
@code {
    [Parameter]
    public int Id { get; set; }
}

int类型路由可以正常访问

使用字符串无法访问到该路由

常见类型约束

函数约束

路由模板中,可以执行函数,用来验证路由参数值是否符合约束要求。 我们在这里为id添加了约束{id:max(100)}

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage/{id:max(100)}"
<h3>demoPage</h3>
<h2>路由参数Id:@Id</h2>
@code {
    [Parameter]
    public int Id { get; set; }
}

运行结果

运行后我们发现发生了报错,这是因为 使用@page 指令指定路由模板,则所有函数约束所应用的路由参数必须是 string 类型,框架不提供强制自动转换。 我们修改为string试试效果如何

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage/{id:max(100)}"
<h3>demoPage</h3>
<h2>路由参数Id:@Id</h2>
@code {
    [Parameter] 
    public string Id { get; set; } = null!;
}

这次运行正常了,并且超出路由限制的无法访问

catch-all 路由

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage/{*AnyRoute}"
<h3>demoPage</h3>
<h2>路由参数:@AnyRoute</h2>
@code {
    [Parameter] 
    public string? AnyRoute { get; set; }
}

定义的 AnyRoute 参数属性为任意路由参数,必须为 string 类型。 在路由模板中,要在任意路由参数前面使用 * 通配符,并放在{}内,如{*AnyRoute}。

获取路由查询参数

当路由中携带查询参数时,如路由/demoPage?a=abc&b=4,遇到这类参数时,我们需要使用[SupplyParameterFromQuery]特性标记变量来获取参数

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage"
<h3>demoPage</h3>
<h2>路由查询参数:@A</h2>
<h2>路由查询参数:@B</h2>
@code {
    [SupplyParameterFromQuery] 
    public string? A { get; set; }
    
    [SupplyParameterFromQuery] 
    public string? B { get; set; }
}
在这里插入图片描述
在这里插入图片描述

如上的方式就可以获取参数a,b的值

查询参数别名

我们还可以通过设置别名的方式,对查询参数进行获取,以应对参数查询名称和我们想声明的变量名称不一致的情况。 这样的方式我们仍然可以读取到参数

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage"
<h3>demoPage</h3>
<h2>路由查询参数:@Parameter</h2>
<h2>路由查询参数:@B</h2>
@code {
    [SupplyParameterFromQuery(Name = "a")] 
    public string? Parameter { get; set; }
    
    [SupplyParameterFromQuery] 
    public string? B { get; set; }
}

数组查询参数

我们将参数直接使用数组进行接收即可,如下

代码语言:javascript
代码运行次数:0
复制
@page "/demoPage"
<h3>demoPage</h3>
<h2>路由查询参数:</h2>
@if (Parameter is not null)
{
    <ul>
        @foreach (var item in Parameter)
        {
            <p>@item</p>
        }
    </ul>
  
}
<h2>路由查询参数:@B</h2>
@code {
    [SupplyParameterFromQuery(Name = "a")] 
    public string[]? Parameter { get; set; }
    
    [SupplyParameterFromQuery] 
    public string? B { get; set; }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 路由约束
    • 类型约束
    • 常见类型约束
    • 函数约束
    • catch-all 路由
  • 获取路由查询参数
    • 查询参数别名
    • 数组查询参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档