繁体   English   中英

ASP.NET Core 3.1 路由(Route, ActionName)本地化怎么做?

[英]How to do ASP.NET Core 3.1 routing (Route, ActionName) localization?

我正在开发一个 ASP.NET Core 3.1 MVC 网站,该网站使用域名来确定本地化的文化。

例如,所有前往域example.com的请求都将具有en-US文化,而所有前往域example.org的请求都将具有de-DE文化。

我修改了我以前未本地化的网站以在视图等中使用本地化。我利用自己的RequestCultureProvider实现来设置基于域名的文化。 结果如下:

  • https://example.com/Products/My-Application/Help使用en-US作为文化并有英文文本。
  • https://example.org/Products/My-Application/Help使用de-DE作为文化并有德语文本。

注意: Products是 controller, My-Application是应用程序的名称(来自数据库的 URL slug), HelpProducts controller 中的操作。 URL 结构是我用于我的网站的实际结构。

但是,我还想翻译 URL,同时在实际源代码(控制器类和动作函数)中仅依赖英文名称。

例如,这是一个具有单个操作的虚拟 controller(由于简化,与上面的示例 URL 不同)。

[Controller]
[Route("/Products")]
public class ProductController : Controller
{
    [ActionName("EnglishName")]
    public IActionResult EnglishName()
    {
        return View();
    }
}

对于这个简化的例子:

  • URL 示例:
    • 英文 URL: https://example.com/Products/EnglishName
    • 德国 URL: https://example.org/Produkte/GermanName
  • 在源代码中(为了清楚起见),controller 的Route值不得更改。
  • 在源代码中(为了清楚起见), EnglishName动作 function 的ActionName值不得更改。
  • 在源代码中(为了清楚起见),不得更改操作EnglishName的 function 名称。
  • 在路由上下文中, Route的值在de-DE文化中应为“ /Produkte ”。
  • 在路由上下文中, EnglishName动作的ActionName的值在de-DE文化中应为“ GermanName ”。
  • 所有本地化都应使用“常规方式”( .resx文件,如视图的库存本地化等)。

如何在不手动构建动态路由表的情况下实现这一点?

目前,我没有起点。 例如ASP.NET 核心路由本地化的搜索结果只是为在 URL(域名除外)中具有文化提供了答案,但这不是我的用例。 我尝试对属性使用变量名,但这当然行不通。

Filip Woj 在他的博客文章中指出了一个解决方案。

他展示了MapDynamicControllerRouteDynamicRouteValueTransformer class 结合使用来转换路线。

暂无
暂无

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

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