previously和Stack Overflow已经以类似但不完全相同的方式询问了这个问题(我感到不满意)elsewhere。
来自Linux世界,我想使用ASP.NET MVC,但避免相同但不同的路由解析到同一页面。我不想要强制所有路由都是100%小写。
e.g。我希望/Home/Something
成为有效路由,/Home/somethingElse
也是有效路由,但不是/Home/something
或/home/somethingelse
,前提是有两个函数Something
和{ {1}}中的{1}}。
我无法在somethingElse
函数中找到任何方法,但也许我错过了一些明显的东西?我可以通过向每个Controller函数添加代码来轻松地回答这个问题,但我显然试图避免这样做。
最佳地,解决方案将涉及捕获特定路线的所有排列,然后301重定向任何与控制器功能不完全匹配的任何
。答案 0 :(得分:2)
在广泛搜索后,我无法找到任何方式。基本上,区分大小写和IIS / ASP.NET显然不会一起使用。
我们现在正在使用一些kludge来解决这个问题。该代码已在github上开源(MIT许可证):NeoSmart Web Toolkit,特别是this file containing the SEO redirect code。
使用它很容易:控制器类中的每个GET方法都需要在开头添加这一行:
Seo.SeoRedirect(this);
SEO重写类自动使用C#5.0的Caller Info属性来完成繁重的工作,使上面的代码严格复制粘贴。
理想情况下,我希望找到一种方法将这行代码转换为属性。例如,使用[CaseSensitive]
为控制器方法添加前缀会自动产生与写入该行相同的效果,但是,我还不知道如何执行此操作。
我也找不到用Routing
类/结构来解决这个问题的方法。这是一些不透明的代码!