ASP.NET Core 3 MVC 端点路由和路由本地化

ASP.NET Core 3 MVC endpoint routing and localization by route

我开始弄乱端点路由和 url 翻译,但我想我遗漏了一些东西。

我的解决方案是here

我从this blog post中的例子开始

在地址栏中写入 urls 可以正常工作,但我注意到锚标记根本不会生成 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}");
            });

我不明白哪里出了问题。我读到有关端点路由的信息,当提供的值生成不存在的路由时,锚标记不会生成 urls,但上面的路由应该有效。

如果可能的话,有没有办法调试路由的验证方式或记录错误?

编辑: 问题现已解决,感谢 Rena。 我用修复更新了 my solution,并使用路由值添加了一个有用的组件来改变文化,希望这对每个会遇到和我一样的问题的人都有用。

该博客向我们展示了如何在您发送 request.But 时翻译 url 在您的情况下,您只想呈现 url,它应该添加路由模板来匹配它。

下面是一个简单的解决方法:

1.View:

@{
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 并且当您单击 link 时,它将进入 orders/list 操作