在ASP.NET MVC中强制区分大小写的路由

时间:2012-10-23 01:08:13

标签: asp.net asp.net-mvc asp.net-routing

previouslyStack Overflow已经以类似但不完全相同的方式询问了这个问题(我感到不满意)elsewhere

来自Linux世界,我想使用ASP.NET MVC,但避免相同但不同的路由解析到同一页面。我想要强制所有路由都是100%小写。

e.g。我希望/Home/Something成为有效路由,/Home/somethingElse也是有效路由,但不是/Home/something/home/somethingelse,前提是有两个函数Something和{ {1}}中的{1}}。

我无法在somethingElse函数中找到任何方法,但也许我错过了一些明显的东西?我可以通过向每个Controller函数添加代码来轻松地回答这个问题,但我显然试图避免这样做。

最佳地,解决方案将涉及捕获特定路线的所有排列,然后301重定向任何与控制器功能不完全匹配的任何

1 个答案:

答案 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类/结构来解决这个问题的方法。这是一些不透明的代码!