Проблема маршрутизации с пользовательским языковым кодом на asp. net ядре - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь добавить пользовательский код языка перед контроллером, используя asp. net core 3.1, и код языка не является стандартным культурным кодом на C#.

Например

ru = Engli sh, tch = Chinese

Чтобы результат был:

localhost/en     -> Go to Home page in English

localhost/tch    -> Go to Home page in Chinese

localhost/       -> Should redirect to localhost/en 

also, there are other controller that need to include the language code as well

localhost/en/blog        -> Go to blog Listing page in English

localhost/blog           -> Redirect to localhost/en/blog and Go to blog Listing page

localhost/en/blog/{id}   -> Go to blog detail page in English

localhost/blog/{id}      -> Redirect to localhost/en/blog/{id}   and Go to blog detail page

localhost/en/event          -> Go to event Listing page in English

localhost/event             -> Redirect to localhost/en/event and Go to event Listing page

localhost/en/event/{id}     -> Go to event detail page in English

localhost/event/{id}        -> Redirect to localhost/en/event/{id}  and Go to event detail page

В файле startup.cs я использую UseEndpoints для маршрутизации на

  app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllerRoute(
                        name: "others",
                        pattern: "{language}/{controller}/{id?}",
                        defaults: new { action = "Index" });

                    endpoints.MapControllerRoute(
                       name: "default",
                       pattern: "{language}/{controller=Home}",
                       defaults: new { controller = "Home", action = "Index" });
            });

Ниже приведен класс контроллера моего блога:

      [Route("{language}/blog")]
        [Route("blog")]
        public async Task<IActionResult> Index(string language)
        {
            if (language == null || (!language.Equals("en") && !language.Equals("tch")))
                return  RedirectToAction("Index", new { language = "en" });
.......
        }

Приведенный выше код работает нормально, если я ввожу localhost / en / blog и параметр языка может захватывать язык из URL, но когда я пытаюсь использовать RedirectToAction, язык становится строкой запроса localhost / blog? Language = ru, просто интересно, есть ли какие-либо настройки / неправильная кодировка ...

Любой может дать мне немного советовать? Спасибо

1 Ответ

0 голосов
/ 01 апреля 2020

Лучший способ добиться этого - создать пользовательское ограничение маршрута: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-3.1#custom -route-constraints

...