【问题标题】:How to do ASP.NET Core 3.1 routing (Route, ActionName) localization?ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?
【发布时间】:2020-04-30 10:16:58
【问题描述】:

我正在开发一个使用域名来确定本地化文化的 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 是控制器,My-Application 是应用程序的名称(来自数据库的 URL slug),HelpProducts 控制器中的操作。 URL 结构是我用于网站的实际结构。

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

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

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

对于这个简化的例子:

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

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

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

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc asp.net-core-3.1


    【解决方案1】:

    Filip Woj 在他的blog post 中指出了一个解决方案。

    他展示了MapDynamicControllerRoute 结合DynamicRouteValueTransformer 类的用法来翻译路由。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 2021-01-29
      • 2020-11-15
      • 1970-01-01
      • 2020-02-23
      • 2017-11-17
      • 2020-10-31
      • 2016-04-12
      相关资源
      最近更新 更多