这个问题是以类似但不完全相同的方式提出的(并且没有得到令我满意的解决)之前 on 堆栈溢出 and 别处.
来自 Linux 世界,我想使用 ASP.NET MVC,但避免使用相同但大小写不同的路由解析到同一页面。我愿意not想要强制所有路由都 100% 小写。
例如我想/Home/Something
是一条有效的路线并且/Home/somethingElse
也是有效的路线,但不是/Home/something
or /home/somethingelse
,给定两个函数Something
and somethingElse
in the HomeController
.
我找不到任何方法可以从内部做到这一点RegisterRoutes
功能,但也许我错过了一些明显的东西?我可以通过向每个控制器函数添加代码来轻松回答这个问题,但我显然试图避免这样做。
最理想的解决方案是捕获all特定路由的排列,然后 301 重定向任何与控制器功能的情况不完全匹配的内容。
我无法找到any经过广泛搜索后执行此操作的方法。基本上,区分大小写和 IIS/ASP.NET 显然不能并存。
我们现在使用一些拼凑的方法来解决这个问题。代码已在github上开源(MIT许可):NeoSmart 网络工具包, 尤其,该文件包含 SEO 重定向代码.
使用它非常简单:控制器类中的每个 GET 方法只需要在开头添加这一行:
Seo.SeoRedirect(this);
SEO 重写类自动使用 C# 5.0 的 Caller Info 属性来完成繁重的工作,使上面的代码严格复制和粘贴。
理想情况下,我很想找到一种方法将该行代码转换为属性。例如,在控制器方法前加上前缀[CaseSensitive]
会自动产生与在该行中写入相同的效果,但可惜的是,我(还不)知道如何做到这一点。
我也找不到任何方法来解决这个问题Routing
类/结构。那是一些不透明的代码!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)