3

以前Stack Overflow其他地方以类似但不相同的方式提出了这个问题(并且没有让我满意)。

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

例如,我想/Home/Something成为一条有效路线,/Home/somethingElse也想成为一条有效路线,但不是/Home/somethingor /home/somethingelse,给定两个名为SomethingandsomethingElse的函数HomeController

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

理想情况下,该解决方案将涉及捕获特定路由的所有排列,然后 301 重定向任何与控制器功能的情况不完全匹配的排列。

4

1 回答 1

2

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

我们现在正在使用一些kludge来解决这个问题。该代码已在 github 上开源(MIT 许可):NeoSmart Web Toolkit,特别是包含 SEO 重定向代码的此文件

使用它很简单:控制器类中的每个 GET 方法只需要在开头添加这一行:

Seo.SeoRedirect(this);

SEO 重写类自动使用 C# 5.0 的 Caller Info 属性来完成繁重的工作,使上面的代码严格地复制和粘贴。

理想情况下,我很想找到一种方法将那行代码变成一个属性。例如,在控制器方法前面加上前缀[CaseSensitive]将自动与在该行中写入具有相同的效果,但是唉,我(还)不知道如何做到这一点。

我也找不到任何用Routing类/结构来解决这个问题的方法。那是一些不透明的代码!

于 2012-11-06T06:51:17.840 回答