Веб-сайт ASP.NET Core 2.2 показывает данные из Kentico Cloud CMS. Некоторые элементы содержат поле расширенного текста. Эти поля могут содержать ссылки на другие элементы контента. Эти ссылки должны быть преобразованы в URL на веб-сайте.
Это документы предполагают, что это делается путем реализации интерфейса IContentLinkUrlResolver
. Тем не менее, образец слишком пустышка для целей нашего сайта. Наш распознаватель должен знать контекст запроса (например, текущую культуру пользовательского интерфейса, поскольку сайт является мультиязычным) и определения маршрутов, поскольку это единственное место, которое определяет, как должны выглядеть URL-адреса.
Фактически, распознаватель должен иметь возможность вызывать Url.Action так, как он мог бы быть внутри представления.
Преобразователь URL должен учитывать маршруты и текущую культуру пользовательского интерфейса. Ожидается, что его логика будет такой:
if (the linked content item type is Page)
{
Url.Action("Page", "Home", new [] { codename = content item’s codename });
}
else if (the linked content item type is PageFont)
{
Url.Action("Font", "Home", new [] { codename = content item’s codename });
}
else
{
throw an error about an unsupported content type.
}
Правила определены как:
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions.Value);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "areas",
template: "{culture=en-US}/{area:exists}/{controller=Home}/{action=Index}/{id?}");
mvcRoutes.MapRoute(
name: "sitemap",
defaults: new { controller = "Sitemap", action = "Index" },
template: "sitemap.xml");
mvcRoutes.MapRoute(
name: "font",
defaults: new { controller = "Home", action = "Font" },
template: "{culture=en-US}/font/{codename}");
mvcRoutes.MapRoute(
name: "page",
defaults: new { controller = "Home", action = "Page" },
template: "{culture=en-US}/{codename}");
mvcRoutes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
});
});
});
Как разрешить ссылки с учетом маршрутов в конфигурации сайта?