路由参数如何在 Blazor 中将值分配给 属性?

How route parameter assigns the value to property in Blazor?

下面的代码块是 Blazor 文档。但我无法弄清楚 '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";
    }
}

TL;DR

Blazor 通过忽略单词的大小写来匹配路由参数和属性。


Blazor 从路由中获取所有参数并从您的 class 中获取所有属性,并在忽略大小写的情况下对其进行分配。

所以小写 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# 属性以大写开头,所以他们可能会忽略大小写。

还有更多阅读!

您正在阅读的 Blazor 文档并非旨在解释所有路由。它只是解释了 Blazor 如何使用 ASP.NET 核心路由。

More on ASP.NET Core Routing


绑定到 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 页面 -> @page "/customer/{id:int}"(页面指令)

Blazor -> @page "/customer/{id:int}"(页面指令)


循序渐进

示例路线:@page "/customer/{id:int}"

  • 最终用户导航到的路线
  • URL 由 ASP.NET 核心路由器
  • 匹配到一个端点
  • URL 被标记为路由值
  • "{id:int}"被Route Constraints处理,接受或拒绝,在这种情况下,转换为强类型int
  • 路由值被打包并提供给您的代码(控制器、组件等),它提供 1 的客户 ID 作为参数。

Warning : this is high level and glossing over some key things, please continue reading More on ASP.NET Core Routing