📘 Маршрутизация в ASP.NET Core
- Замена маршрута:
Допутим вы хотите, чтобы первую часть маршрута с параметрами обрабатывала одна страница, а вторую часть - другая страница.
Например, маршрут catalog/{section} обрабатывает стандартная страница /catalog/index.cshtml, а маршрут catalog/{section}/{item) обрабатывает страница /catalog/item.cshtml. Тогда, для страницы /catalog/item.cshtml вам надо переписать маршрут:
@page "/catalog/{section}/{item}"
а на странице catalog/{section} предусмотреть, чтобы параметр {section} не принимал значение item
Для большего контроля можно применять ограничители параметров, которsе контролируют их тип, например:
@page "/catalog/{section:alpha:minlength(3):maxlength(8)}/{item:alpha:minlength(3):maxlength(15)}"
📘 Справочник по ограничениям маршрутов
- Использование дефиса в маршрутах:
Если дефис используется в параметрах маршрута, то всё работает. В примеры выше, допустимы дефисы для параметров{section},{item}, но уже нельзя применить ограничение alpha{section:alpha}:
@page "/catalog/{section}/{item}"
допустимы маршруты с дефисами:
/catalog/section-first/item-some
Если вы хотите использовать дефис для названий страниц, то надо написать код. См. документацию ниже:
◻ Изменение маршрутов страницы (learnrazorpages.com)
◻ Дефисы в имени файла(stackoverflow.com)
- Материалы:
📘 Соглашения для маршрутов и приложений
◻ Razor Pages Routing (learnrazorpages.com)
◻ Routing in Razor Pages (mikesdotnetting.com)
◻ Необязательные параметры в маршрутизации (mikesdotnetting.com)
◻ How to Use Routing in ASP.NET Core 3.0 Razor Pages (exceptionnotfound.net)
В зависмости от параметров, вернуть страницу, или сделать, например редирект:
public IActionResult OnGet(string section)
{
if (string.IsNullOrEmpty(section))
{
return LocalRedirectPermanent("/");
}
return Page();
}
🟢 Возвращение результата в Razor Pages
◻ Результаты действий в Razor Pages