asp.net-mvc - ASP.NET MVC 路由失败。这是错误还是极端情况?

标签 asp.net-mvc asp.net-mvc-3 routes asp.net-mvc-routing system.web.routing

我有一个 ASP.NET MVC 3 应用程序,用户可以在其中发布“如果 yada yada yada 会更好”的建议。
对于建议详细信息页面,我定义了一个不错的 SEO 友好路线,如下所示:

routes.MapRoute(null, "suggestion/{id}/{it}/would-be-better-if-{if}", 
    new { controller = "suggestion", action = "details" });

如您所见,我希望修复“如果”部分会更好。

这条路线非常适合任何旧建议,并生成类似 suggestion/5/this-site/would-be-better-if-it-had-a-iphone-application 的链接。 ,点击链接实际上会请求相应的详细信息页面。

具有讽刺意味的是,我的一个 friend 碰巧是一名测试人员,他设法不由自主地发布了一条实际上打破路线的建议:“如果'如果'总是在中间对齐,那么这个网站会更好”。
为此建议生成的链接是/suggestion/84/this-site/would-be-better-if-would-be-better-if-was-always-alligned-in-the-middle .

我试过 Phil Haack's Routing Debugger并已确认该路线实际运行至 suggestion/84/this-site/would-be-better-if-would-be-better-if- ,所以实际上接受了第二个“如果更好”;在此之后添加任何内容实际上会导致 url 不匹配任何路由(感谢 Omar - 请参阅评论 - 寻求帮助)。

请记住 我真的不想改变路由定义因为我认为这是我在这种情况下所能管理的,SEO 明智的。

所以,怎么来的使文本等于路由的固定部分会阻止链接匹配路由? 为什么路线断了吗?

我实际上对 更感兴趣为什么 ,因为我相信理解为什么会导致解决方案或至少正确理解一个相当有趣的问题。

最佳答案

这看起来像是 ASP.NET routing: Literal sub-segment between tokens, and route values with a character from the literal sub-segment 的骗局这是该错误的简单得多的版本。我建议关闭这个以支持那个。

我回答了那个问题。

关于asp.net-mvc - ASP.NET MVC 路由失败。这是错误还是极端情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279040/

相关文章:

asp.net-mvc - 在 ASP.NET MVC 3 中只执行一次代码

asp.net-mvc - 在这个 ASP.NET MVC 3 应用程序中,我缺少什么来获得不显眼的客户端验证?

asp.net-mvc-3 - 带十进制的数据注释不起作用

ruby-on-rails - Rails路由别名

.net - Cassini (VS WebDev) 在不同线程上执行 BeginRequest 和 EndRequest

c# - 更正 JSON 结果对象

asp.net - 在asp.net MVC中不使用LabelFor Helper获取DisplayName属性

javascript - 如何正确使用Express 4多路路由器

ruby-on-rails - Rails,没有路线匹配{ :action= >"show"

asp.net-mvc - 如何在@Html.TextBox mvc4 中同时添加css class 和id