我有一个特定的路由需求,我无法开始工作。我在 StackOverflow 上找到了很多答案,这些答案让我有点走神,但不是一路走来。
我以标准 C# 方式命名我的控制器和操作,即每个单词的第一个字母都是大写的:
MyController.MyAction()
要达到此操作方法,我希望所有这些 url 都能正常工作:
/my-controller/my-action
/my-cöntroller/my-äction
/MyController/MyAction
/MyCöntroller/MyÄction
(虽然最后两个不是很重要......)
所以这里有两件事:
- 破折号可用于分隔单词(出于可读性和 SEO 目的)。
- 可以使用一些非英文字符(指定所有替换 - 没有“魔法”)。
我想用这样的助手创建链接:
@Html.ActionLink("My link text", "MyController", "MyAction")
即标准方式,这将创建以下链接:
/my-controller/my-action
希望这可以在不使我的路由配置过于混乱的情况下完成(例如,每个动作或某事都有一个路由),或者将属性放在所有动作方法上,但如果这是我想知道的唯一解决方案。
到目前为止,我尝试的是实现一个覆盖 GetRouteData() 和 GetVirtualPath() 的自定义路由类。它让我更接近,但不是一直,但我可能会做错事
我有一个想法,通过在执行路由之前进行替换来解决非英语字符的问题,但我还没有找到一种方法来做到这一点(见这个问题)。
如果有人可以帮助我,或者至少为我指明正确的方向,我将非常感激!:)
编辑:请注意,上面的示例网址只是为了描述我想要的。实际上,有很多 url 必须处理,所以我更喜欢一些通用的解决方案,而不是涉及每个操作的一条路线或类似的东西。