Как параметр маршрута присваивает значение свойству в 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";
    }
}

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

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

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

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


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

В файле Startup.cs вашего Blazor Web App вы увидите что-то вроде следующего:

    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

Другие вопросы по тегам