【问题标题】:Force case-sensitive routing in ASP.NET MVC在 ASP.NET MVC 中强制区分大小写路由
【发布时间】:2012-10-12 21:35:35
【问题描述】:

previously Stack Overflowelsewhere 上以类似但不相同的方式提出了这个问题(并且没有让我满意)。

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

例如我希望/Home/Something 成为有效路线,/Home/somethingElse 也成为有效路线,但不是/Home/something/home/somethingelse,给定SomethingsomethingElse 中的两个函数HomeController

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

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

【问题讨论】:

  • MVC 和 ASP.NET Webforms 都可以使用相同的路由引擎。
  • 值得注意的是,您没有指明 C# 或 VB.Net - VB.Net 天生不区分大小写。

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


【解决方案1】:

经过大量搜索后,我无法找到 任何 方法。基本上,区分大小写和 IIS/ASP.NET 显然不能同时使用。

我们现在正在使用一些杂项来解决这个问题。代码已在 github 上开源(MIT 许可):NeoSmart Web Toolkit,尤其是this file containing the SEO redirect code

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

Seo.SeoRedirect(this);

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

理想情况下,我很想找到一种方法将那行代码变成一个属性。例如,在控制器方法前加上 [CaseSensitive] 会自动产生与在该行中写入相同的效果,但可惜,我(尚)不知道该怎么做。

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

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 2015-06-06
    • 2016-11-24
    • 2016-07-21
    • 2014-03-10
    • 1970-01-01
    • 2012-06-04
    • 2019-12-20
    • 2012-10-01
    相关资源
    最近更新 更多