在ASP.NET MVC强制区分大小写的路由(Force case-sensitive routin

2019-07-01 20:49发布

这个问题已经被问的相似但不完全相同的方式(并没有解决我的满意度) 以前在堆栈溢出和其他地方 。

从Linux世界的未来,我想使用ASP.NET MVC,但避免解析到同一页面相同,但不同的外装路线。 我不想强迫所有路由100%小写。

例如,我想/Home/Something是一个有效的途径和/Home/somethingElse也成为一个有效的途径,但不是/Home/something/home/somethingelse ,给出了两个函数调用SomethingsomethingElseHomeController

我找不到从内这样做的任何方式RegisterRoutes功能,但也许我失去了一些东西明显? 我可以将代码添加到每个控制器功能回答这个问题很轻松了,但我显然试图避免这样做。

理想情况下,该解决方案将涉及捕捉特定路线的所有排列,然后重定向301是任何不准确控制器的功能的情况相匹配。

Answer 1:

我无法找到经过广泛的搜索这样做的任何方式。 基本上,区分大小写和IIS / ASP.NET显然不一起去。

我们现在正在使用有点杂牌的解决这个问题。 该代码已经opensourced(MIT许可)在GitHub上: NeoSmart Web工具包 ,特别是包含SEO重定向代码文件 。

使用它,是很容易:控制器类中的每个GET方法需要在开始时只添加这一条线:

Seo.SeoRedirect(this);

搜索引擎优化重写类自动使用C#5.0的来电显示信息的属性做繁重,使得上述严格的复制和粘贴代码。

理想情况下,我很想找到一个办法把该行的代码放到一个属性。 例如,前缀与控制器方法[CaseSensitive]会自动拥有该管线写同样的效果,但很可惜,我没有(还)知道如何做到这一点。

我也无法找到与搞清楚了这一点的任何Routing类/结构。 这是一些不透明的代码!



文章来源: Force case-sensitive routing in ASP.NET MVC