Маршрутизация и локализация конечных точек ASP.NET Core 3 MVC по маршрутам - PullRequest
0 голосов
/ 28 октября 2019

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

Мое решение - здесь

Я начал с примера в это сообщение в блоге

запись URL в адресной строке работает, как и ожидалось, но я заметил, что тег привязки вообще не генерирует URL.

Образец макета

     @{ 
         Dictionary<string, string> routePol = new Dictionary<string, string>();
         routePol.Add("language", "pl");
         routePol.Add("controller", "Home");
         routePol.Add("action", "Index");
    }
    <a asp-all-route-data="routePol">Poland</a>

должен генерировать

<a href="test/pl/Home/Index">Poland<a>

результат

<a href >Poland<a>

Основная конечная точка

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDynamicControllerRoute<TranslationTransformer>(
                    "{language=pl}/{controller=orders}/{action=list}");
            });

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

Если это возможно, есть ли способ отладить, как маршрутподтверждено или в журнале ошибок?

РЕДАКТИРОВАТЬ: проблема теперь решена, благодаря Rena. Я обновил мое решение с исправлениями и добавил полезный компонент для изменения культуры с использованием значения маршрута, надеюсь, он будет полезен всем, кто столкнется с теми же проблемами, что и я.

1 Ответ

1 голос
/ 29 октября 2019

В блоге показано, как переводить URL-адрес при отправке запроса. Но в вашем случае вы просто хотите отобразить URL-адрес, в него должен быть добавлен шаблон маршрута, соответствующий ему.

Вот такой обходной путь, какниже:

1.Просмотр:

@{
Dictionary<string, string> routePol = new Dictionary<string, string>();
routePol.Add("language", "pl");
routePol.Add("controller", "zamowienia");
routePol.Add("action", "lista");    
}
@*controler name and action name should be the key name in TranslationDatabase 
not the value name.*@
<a asp-all-route-data="routePol">Poland</a>

2.Startup.cs:

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{language=pl}/{controller=orders}/{action=list}");
            endpoints.MapDynamicControllerRoute<TranslationTransformer>(
                "{language=pl}/{controller=orders}/{action=list}");

        });

Будет сгенерирован URL: /pl/zamowienia/lista и при нажатииссылка, она бы попала в orders/list действие

...