这个问题是以类似但不完全相同的方式提出的(并且没有得到令我满意的解决)previously上Stack Overflow和 elsewhere .
来自 Linux 世界,我想使用 ASP.NET MVC,但避免使用相同但大小写不同的路由解析到同一页面。我不想想要强制所有路由都 100% 小写。
例如我希望 /Home/Something
成为有效路线,并且 /Home/somethingElse
也成为有效路线,但不是 /Home/something
或 /home/somethingelse
,给定 HomeController
中名为 Something
和 somethingElse
的两个函数。
我在 RegisterRoutes
函数中找不到任何方法来执行此操作,但也许我遗漏了一些明显的东西?我可以通过向每个 Controller 函数添加代码来轻松回答这个问题,但我显然试图避免这样做。
最理想的解决方案是捕获特定路由的所有排列,然后对任何与 Controller 功能的情况不完全匹配的排列进行301重定向。
最佳答案
经过大量搜索后,我无法找到任何执行此操作的方法。基本上,区分大小写和 IIS/ASP.NET 显然不能并存。
我们现在使用一些拼凑的方法来解决这个问题。代码已在github上开源(MIT许可):NeoSmart Web Toolkit ,特别是this file containing the SEO redirect code .
使用它非常简单: Controller 类中的每个 GET 方法都需要在开头添加这一行:
Seo.SeoRedirect(this);
SEO 重写类自动使用 C# 5.0 的 Caller Info 属性来完成繁重的工作,使上面的代码严格复制和粘贴。
理想情况下,我很想找到一种方法将该行代码转换为属性。例如,在 Controller 方法前添加 [CaseSensitive]
前缀将自动具有与在该行中写入相同的效果,但可惜的是,我(还不)知道如何执行此操作。
我也找不到任何方法来使用 Routing
类/结构来解决这个问题。这是一些不透明的代码!
关于asp.net - 在 ASP.NET MVC 中强制区分大小写的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022221/