下面的代码块是Blazor文档。但我无法弄清楚"text"路由参数是如何以及在什么基础上为text属性赋值的。
@page "/RouteParameter"
@page "/RouteParameter/{text}"
<h1>Blazor is @Text!</h1>
@code {
[Parameter]
public string Text { get; set; }
protected override void OnInitialized()
{
Text = Text ?? "fantastic";
}
}
还有更多阅读
您阅读的Blazor文档并不是为了解释所有的路由。它只解释了Blazor是如何使用ASP.NET核心路由的。
有关ASP.NET核心路由的更多信息
绑定到ASP.NET核心路由
在Blazor Web应用程序的Startup.cs文件中,您会看到以下内容:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
MapBlazorHub()
是Blazor如何连接到ASP.NET核心路由中的。
Blazor路由使用与MVC和Razor页面相同的路由器
示例:
MVC->[Route("customer/{id:int}")]
(控制器上的属性(
Razor Pages->@page "/customer/{id:int}"
(页面指令(
Blazor->@page "/customer/{id:int}"
(页面指令(
逐步
示例路线:@page "/customer/{id:int}"
- 路线由最终用户导航到
- ASP.NET核心路由器将URL与终结点匹配
- URL被标记为路由值
"{id:int}"
由路由约束处理,接受或拒绝,在这种情况下,转换为强类型int
- 路由值被打包并提供给您的代码(控制器、组件等(,它提供
1
的客户id作为参数
警告:这是高级别的,掩盖了一些关键内容,请继续阅读有关ASP.NET核心路由的更多信息
TL;DR
Blazor通过忽略单词的大小写来匹配路由参数和属性。
Blazor从路由中获取所有参数,从类中获取所有属性,并忽略大小写进行赋值。
因此,小写text
变为Text
。
这也适用于
@page "/RouteParameter"
@page "/RouteParameter/{Text}" // upper case Text
<h1>Blazor is @Text!</h1>
@code {
[Parameter]
public string Text { get; set; }
protected override void OnInitialized()
{
Text = Text ?? "fantastic";
}
}
但因为通常url没有大写,而C#属性以大写开头,所以它们可能会忽略大小写进行比较。