gpt4 book ai didi

c# - ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?

转载 作者:行者123 更新时间:2023-12-04 15:29:28 25 4
gpt4 key购买 nike

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

例如,所有请求都进入域 example.com会有 en-US文化,而所有请求都进入域 example.org会有 de-DE文化。

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

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

注意:Products是 Controller ,My-Application应用程序的名称(来自数据库的 URL 段),以及 HelpProducts 中的 Action Controller 。 URL 结构是我在我的网站上使用的实际结构。

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

例如,这是一个只有一个 Action 的虚拟 Controller (由于简化而打破了上面的示例 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 的值不得更改 Controller 。
  • 在源代码中(为清楚起见),ActionName 的值的 EnglishName Action 函数不得更改。
  • 在源代码中(为了清楚起见),操作的函数名称 EnglishName不得更改。
  • 在路由上下文中,Route 的值在 de-DE 中应为“/Produkte”文化。
  • 在路由上下文中,ActionName 的值的 EnglishName de-DE 中的操作应为“GermanName”文化。
  • 所有本地化都应使用“常规方式”(.resx 文件,例如 View 的库存本地化等)。

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

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

最佳答案

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

他展示了 MapDynamicControllerRoute 结合 DynamicRouteValueTransformer 类来转换路线的用法。

关于c# - ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61521069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com