Изменение маршрута по умолчанию в ASP.NET Core Razor Pages - PullRequest
0 голосов
/ 05 июня 2018

Поскольку я новичок в концепции Razor Pages в ASP.NET Core, я хочу применить общий URL-адрес для передачи параметра культуры в маршрут.

Я сделал это с помощью MVC, но я хотел бы такжечтобы применить его к страницам Razor, вот что я сделал в MVC, и он работает по мере необходимости

  routes.MapRoute(
                    name: "default",
                    template: "{culture}/{controller=Home}/{action=Index}/{id?}");

Я применил его с определенной страницей, и он тоже работает

   options.Conventions.AddPageRoute("/RealEstate/Index", "{culture}/RealEstate");

, но когдая хочу подать заявку на все страницы, это не работает, и я не знаю, что должно быть передано как PageName

 options.Conventions.AddPageRoute("*", "{culture}/{*url}");

также я хочу исключить папку администратора из этого соглашения, чтобы быть siteName.com/ admin вместо en-US / Admin также мне нужно установить культуру по умолчанию в URL, когда пользователь впервые открывает сайт, например, для siteName.com и загружает культуру по умолчанию или даже загружает siteName.com/en-US по умолчанию

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

Спасибо за помощь Кирка Ларкина

Я использовал его ответ и добавил небольшую модификацию, чтобы исключить Admin из маршрутизации культуры, а также установить культуру по умолчанию для веб-сайта, когда не выбрана культура

options.Conventions.AddFolderRouteModelConvention("/", model =>
                   {
                       foreach (var selector in model.Selectors)
                       {
                           if (selector.AttributeRouteModel.Template.StartsWith("Admin"))
                           {
                               selector.AttributeRouteModel = new AttributeRouteModel
                               {
                                   Order = -1,
                                   Template =
                                       selector.AttributeRouteModel.Template,
                               };
                           }
                           else
                           {
                               selector.AttributeRouteModel = new AttributeRouteModel
                               {
                                   Order = -1,
                                   Template = AttributeRouteModel.CombineTemplates(
                                       "{culture=en-US}",
                                       selector.AttributeRouteModel.Template),
                               };
                           }

                       }
                   });
0 голосов
/ 05 июня 2018

Вы можете применить соглашение модели маршрута к папке, используя AddFolderRouteModelConvention.В документах есть пример того, как это сделать, который я взял и изменил для ваших целей:

options.Conventions.AddFolderRouteModelConvention("/", model =>
{
    foreach (var selector in model.Selectors)
    {
        selector.AttributeRouteModel = new AttributeRouteModel
        {
            Order = -1,
            Template = AttributeRouteModel.CombineTemplates(
                "{culture}",
                selector.AttributeRouteModel.Template),
        };
    }
});

Это относится ко всем страницам, учитывая, что "/"устанавливается в качестве папки и, следовательно, применяется на корневом уровне.Вместо добавления нового селектора, как в приведенном мной примере, он изменяет существующий селектор, добавляя маркер {culture}, к которому вы можете обращаться по своим страницам по имени, например:

public void OnGet(string culture)
{
    // ...
}

Если бы мы добавлен a новый селектор , страницы будут доступны как с культурой, так и без нее, что делает его необязательным.В подходе, который я показал, требуется токен {culture}, как указано в OP.

...