ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?
Posted
技术标签:
【中文标题】ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?【英文标题】:How to do ASP.NET Core 3.1 routing (Route, ActionName) localization? 【发布时间】: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),Help
是 Products
控制器中的操作。 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 中包含文化的答案(域名除外),但这不是我的用例。我尝试为属性使用变量名,但这当然行不通。
【问题讨论】:
【参考方案1】:Filip Woj 在他的blog post 中指出了一个解决方案。
他展示了MapDynamicControllerRoute
结合DynamicRouteValueTransformer
类的用法来翻译路由。
【讨论】:
以上是关于ASP.NET Core 3.1 路由(Route、ActionName)本地化怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在“管理员”路由中