繁体   English   中英

ASP.NET Core 3 MVC端点路由和按路由定位

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

我开始搞乱端点路由和 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。 我通过修复更新了我的解决方案,并使用路由值添加了一个有用的文化改变组件,希望这对遇到与我相同的问题的每个人都有用。

该博客向我们展示了如何在您发送请求时翻译 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.启动.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操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM