Как параметр маршрута присваивает значение свойству в Blazor?

Ниже приведен блок кода - документация 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";
    }
}

person arjun kr    schedule 10.03.2020    source источник
comment
Маршрутизатор анализирует параметр text из URL-адреса и устанавливает значение компонента. Например, если URL-адрес /RouteParameter/MyText, свойство Text будет установлено в MyText. Вы об этом спрашиваете?   -  person tocqueville    schedule 10.03.2020


Ответы (2)


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 # начинаются с верхнего регистра, возможно, это сравнение игнорирует регистр.

person Vencovsky    schedule 10.03.2020

Больше чтения!

Документация Blazor, которую вы читали, не предназначена для объяснения ВСЕЙ маршрутизации. Это только объясняет, как Blazor использует маршрутизацию ASP.NET Core.

Подробнее о маршрутизации ASP.NET Core


Привязка к маршрутизации ASP.NET Core

В файле Startup.cs вашего веб-приложения Blazor вы увидите что-то вроде следующего:

    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}"

  • Маршрут просматривается конечным пользователем
  • URL-адрес соответствует конечной точке маршрутизатором ASP.NET Core.
  • URL-адрес токенизируется в значения маршрута
  • "{id:int}" обрабатываются ограничениями маршрута, принимаются или отклоняются и в этом случае преобразуются в строго типизированный int
  • Значения маршрута упаковываются и передаются вашему коду (контроллеру, компоненту и т. Д.), И он предоставляет идентификатор клиента 1 в качестве параметра.

Предупреждение: это высокий уровень и упущение некоторых ключевых моментов, продолжайте читать Подробнее о маршрутизации ASP.NET Core

person Adam Vincent    schedule 10.03.2020