asp.net - 在 ASP.NET MVC 中强制区分大小写的路由

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

这个问题是以类似但不完全相同的方式提出的(并且没有得到令我满意的解决)previouslyStack Overflowelsewhere .

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

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

我在 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/

相关文章:

c# - IIS 不异步处理 Web Api 请求

asp.net-mvc - 存储库模式和 IQueryable<T> 的性能

JavaScript 不能在不同的域中工作吗?

c# - 忽略 ASP.NET Web API 中的 Controller

asp.net-mvc-2 - 如何在 ASP.NET MVC2 中路由带下划线的小写 URL ('questions/add_to_favorites/123')?

asp.net-mvc-2 - ASP.NET MVC 路由默认值

asp.net - ASP 菜单未显示

javascript - 如何更改弹出对话框本身内的 jquery ui 对话框宽度?

javascript - 为什么调用 RedirectToAction 时我的网页不刷新?

c# - 尝试将类型注册到 IoC 容器时,HttpContext.Current 为空