Строка запроса представляет ту часть запрошенного адреса, которая идет после символа ? и представляет набор параметров, разделенных символом амперсанда &:
?параметр1=значение1&параметр2=значение2&параметр3=значение3
Каждому параметру с помощью знака равно передается некоторое значение.
И компоненты Blazor также могут получить значения данных параметров. Но получение параметров строки запроса будет немного отличаться от получения параметров маршрута.
Чтобы получить значение из параметра строки запроса в свойство компонета, к этому свойству должен применяться атрибут [SupplyParameterFromQuery] вместе с атрибутом [Parameter].
Стоит отметить, что получить параметры из строки запроса можно только в маршрутизируемых компонентах, то есть в которых применяется директива @page.
Blazor позволяет получать из строки запроса значения следующих типов:
bool, DateTime, decimal, double, float, Guid, int, long, string (а также их nullable-двойники)
массивы выше указанных значений
Например, пусть у нас будет следующий компонент User:
@page "/user" <h2>Hello @Name</h2> @if(Age!=null) { <h3>Your age: @Age</h3> } @code { [Parameter] [SupplyParameterFromQuery] public string? Name { get; set; } [Parameter] [SupplyParameterFromQuery] public int? Age { get; set; } }
Данный компонент является маршрутизируемым - он принимает директиву @page
, который определяет сопоставляемый с компонентом шаблон маршрута - "/user".
В этом компоненте определены два свойства, которые будут сопоставляться с параметрами строки запроса - Name и Age.
Протестируем компонент, передавая ему какую-нибудь строку запроса:
Мы можем передать через строку все параметры, часть параметров или вобще не указывать строку запроса. Например, при запросе по адресу
https://localhost:7134/user?name=Tom&age=38
Свойство Name получит значение параметра "name", а свойство Age - значение параметра "age". Сопоставление между свойствами компонента и параметров строки запроса идет по имени. При этом регистр не имеет значения.
Также можно указать имя параметрам строки запроса, если оно отличается, с помощью свойства Name атрибута SupplyParameterFromQuery:
@page "/user" <h2>Hello @Name</h2> @code { [Parameter] [SupplyParameterFromQuery(Name="user-name")] public string? Name { get; set; } }
В данном случае свойство Name будет сопоставляться с параметром "user-name":