Пользовательская маршрутизация в ASP. NET Core 2.2 Razor Pages - PullRequest
0 голосов
/ 20 января 2020

У меня проблемы с настройкой соглашения о маршрутизации для Razor Pages в приложении ASP. NET Core 2.2 (я перехожу с традиционного MVC на Razor Pages).

I Я использую стандартную структуру папок Pages, как рекомендовано в документации, но я хочу немного настроить сгенерированные маршруты.

Например, на странице Details.cs html в папке Products у меня есть следующая директива :

@page "{id:int}

URL-адрес для этой страницы:

/Products/Details/42

однако я хочу, чтобы URL-адрес был:

/Products/42

Я хочу, чтобы это было применимо ко всему миру , а не только на странице сведений о продукте. Документация по этому вопросу не совсем ясна.

1 Ответ

0 голосов
/ 20 января 2020

Таким образом, кажется, это способ сделать это:

https://www.mikesdotnetting.com/article/327/customising-routing-conventions-in-razor-pages

  1. Создать класс, который реализует IPageRouteModelConvention:
public class CustomPageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        foreach (var selector in model.Selectors.ToList())
        {
            var template = selector.AttributeRouteModel.Template;
            if (template.EndsWith("Details/{id:int}", StringComparison.OrdinalIgnoreCase))
                selector.AttributeRouteModel.Template = template.Replace("Details/{id:int}", "{id:int}", StringComparison.OrdinalIgnoreCase);
        }
    }
}
Зарегистрируйте класс в Startup.cs:
services
    .AddMvc()
    .AddRazorPagesOptions(o =>
    {
        o.Conventions.Add(new CustomPageRouteModelConvention());
    });

По сравнению со старым MVC способом сделать это кажется огромным усилием, но я вижу, что он позволяет более высокий уровень контроля.

...