我有一个 ASP.NET MVC 3 应用程序,用户可以在其中发布“bla bla would be better if 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
的链接,点击链接实际上会请求相应的详细信息页面。
具有讽刺意味的是,我的一个朋友恰好是一名测试人员,他无意中发布了一条实际上打破路线的建议:“如果'如果'总是在中间对齐会更好,这个网站会更好”。
为此建议生成的链接是
/suggestion/84/this-site/would-be-better-if-would-be-better-if-was-always-alligned-in-the-middle
。
我已经尝试过Phil Haack 的 Routing Debugger并确认该路由实际上会一直工作到suggestion/84/this-site/would-be-better-if-would-be-better-if-
,所以第二个“如果会更好”实际上被接受了;在此之后添加任何内容实际上会导致 url 不匹配任何路由(感谢 Omar -see comments- for help)。
请记住,我真的不想更改路线定义,因为我认为在这种情况下,我可以做到最好,SEO 明智。
那么,为什么文本等于路由的固定部分会阻止链接匹配路由呢?为什么路线中断?
我实际上对为什么更感兴趣,因为我相信理解为什么会导致解决方案,或者至少是对一个相当有趣的问题的正确理解。