После нескольких уроков, в основном этого Мне удалось реализовать поддержку локализации на моем Asp. Net Core 3.1 сайте, но теперь кажется, что маршрутизация не работает должным образом. Вот мои маршруты:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TVShowsDetails",
pattern: "tvshows/{id:int}/{*title}",
defaults: new { controller = "tvshows", action = "details", id = 0 }
);
endpoints.MapControllerRoute(
name: "LocalizedDefault",
pattern: "{lang:lang}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllerRoute(
name: "default",
pattern: "{*catchall}",
defaults: new { controller = "Home", action = "RedirectToDefaultLanguage", lang = "et" });
endpoints.MapRazorPages();
});
Теперь, когда я создаю ссылку, используя этот код: <a asp-controller="TVShows" asp-action="details" asp-route-id="@id" asp-route-title="@title">
по какой-то причине создаваемая ссылка выглядит примерно так: https://localhost:44349/en/tvshows/details/1?title=title
. Интересно, если я go по этой ссылке: https://localhost:44349/en/tvshows/1/title
она показывает ту же страницу. Я пробовал href="Url.Action(...)"
, но он выдает тот же результат.
Если я удаляю {lang:lang}/
в начале шаблона, он генерирует правильную ссылку без языковой части (https://localhost:44349/tvshows/details/1?title=title
), но мне нужно чтобы создать ссылки с текущим языком, так чего мне не хватает?
Редактировать
После нескольких попыток это работает:
endpoints.MapControllerRoute(
name: "tvshowdetails",
pattern: "{lang:lang}/{controller=tvshows}/{action=details}/{id?}/{title}"
);
Но я не хочу чтобы там было название действия (details
). Это дает следующую ссылку:
https://localhost:44349/en/tvshows/details/1/breaking-bad
Я хочу следующую ссылку, однако:
https://localhost:44349/en/tvshows/1/breaking-bad