我有一个ASP.NET MVC 3应用程序,用户可以发布建议,如果 " 如果 yada yada yada,bla bla 会更好 ".对于建议详细信息页面,我已经定义了一个很好的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的路由调试器,并确认该路由实际上会工作到suggestion/84/this-site/would-be-better-if-would-be-better-if-,所以第二个"将会更好 - 如果"实际上已被接受; 之后添加任何内容实际上会导致网址不匹配任何路由(感谢Omar -see评论 - 寻求帮助).
请记住,我真的不想改变路线定义,因为我认为这对于这个案例来说是一样好,SEO-wise.
那么,如何让文本等于路由的固定部分会阻止链接匹配路由?路线为何破裂?
我实际上对这个原因更感兴趣,因为我相信理解为什么会导致解决方案或至少正确理解一个相当有趣的问题.
asp.net-mvc routes asp.net-mvc-routing system.web.routing asp.net-mvc-3
我在寻找匹配路线方面遇到了一些麻烦.
我使用base-32编码的int作为Web应用程序中幻灯片的短链接.每个幻灯片有5个不同版本,我使用首字母来区分每个版本.
路由始终匹配,除非base-32编码的int的第一个字符与指定幻灯片版本的字符相同.所有5个前缀字母都存在此异常:n,f,c,x和h.
前两个字符相同会使这些路线不匹配?我无法理解这里发生了什么(当路线不匹配时,它们只会达到默认值).
路线匹配(/na0):

路线不匹配(/nn0):

路线匹配(/nfg):

路线不匹配(/ffg):

我很难过.这是路由代码,如果在屏幕截图中的RouteDebug表中不清楚:
        routes.MapRoute(
            "NonBrandedSlideshow",
            "n{id}",
            MVC.Slideshow.NonBranded(), null,
            new { id = Settings.Base32Regex }
        );
        routes.MapRoute(
            "FullSlideshow",
            "f{id}",
            MVC.Slideshow.Full(), null,
            new { id = Settings.Base32Regex }
        );
        routes.MapRoute(
            "CompactSlideshow",
            "c{id}",
            MVC.Slideshow.Compact(), null,
            new { id = Settings.Base32Regex }
        );
        routes.MapRoute(
            "FlexibleSlideshow",
            "x{id}",
            MVC.Slideshow.Flexible(), null,
            new { id = Settings.Base32Regex }
        );
        routes.MapRoute(
            "Html5Slideshow",
            "h{id}",
            MVC.Slideshow.NonBrandedHtml5(), null,
            new { id = Settings.Base32Regex }
        );
我在这里应该注意,我使用的是T4MVC(参见第2.2.5节),这些 …