Выбор обработчика страницы для вызова¶
Уже упоминалось что маршрутизация заключается в сопоставлении URL-адресов с обработчиком, а также, чтоRoutingMiddleware выбирает страницу Razor на основе URL-адреса и шаблона маршрута. Однако, страницы Razor могут иметь несколько обработчиков, поэтому рассмотрим, как EndpointMiddleware выбирает, какой обработчик страницы вызвать.
Рассмотрим страницу SearchModel с тремя обработчиками.
public class SearchModel : PageModel
{
public void OnGet() //Обрабатывает GET-запросы
{
...
}
public Task OnPostAsync() //Обрабатывает POST запросы. Async в целях маршрутизации игнорируется
{
...
}
public void OnPostCustomSearch() //Обрабатывает POST-запросы, в которых значение маршрута handler=CustomSearch
{
...
}
}
Когда
EndpointMiddleware выполняет выбранную страницу Razor, то выбирает обработчик страницы на основе двух переменных:
- HTTP-метода, используемого в запросе;
- значения маршрута
handler
Если не включить параметр маршрута в шаблон, handler будет браться из строки запроса: /search?handler=CustomSearch. Если добавить параметр в шаблон, например @page "{handler}", то будет использован запрос вида /search/customsearch.
Итак, конкретный обработчик выбирается по имени вида On{verb}[handler][Async].
Если ни один обработчик не подошел (например, нет обработчика OnDelete()), выполняется неявный обработчик, не содержащий логики; при этом просто возвращается ассоциированное представление Razor. Исключением является HTTP-метод HEAD: если явного обработчика OnHead() нет, выполняется OnGet(), если он существует.
Дата создания : 22 сентября 2022 г.