路由映射器忽略我的自定义路由

时间:2015-11-21 08:24:49

标签: asp.net-mvc routes

我想在我的应用程序中添加SEF网址,而不是像以下链接: /home/product/{reference}(其中{reference}是标识产品参考)

我可以:
/p-big-silver-microwave/{reference}(其中'大银微波'是产品名称)

所以我添加了路线图

routes.MapRoute("Product", "p-{any}/{reference}", new { controller = "Home", action = "Product", reference = UrlParameter.Optional });

然而!现在,如果产品标题(用于生成URL的SEF部分)具有以'p'结尾的单词,例如灯,为它生成的URL将是: /p-lamp-shade/abc123路由映射器同时看到第一个p-和第二个p-,并且由于某种原因忽略了我指定的路由。

我认为在路线图中指定p-{any}/{reference}的网址意味着如果网址开始与p-匹配?

非常感谢有关如何解决此问题的任何帮助!

更新
我尝试了一种不同的路由映射方式,方法是添加约束并更改网址,如下所示:

routes.MapRoute("Product", "{any}/{reference}", new { controller = "Home", action = "Product", reference = UrlParameter.Optional }, new { any = @"^p-" });

这种方法根本不起作用。

1 个答案:

答案 0 :(得分:0)

已解决

UPDATE(上面)中给出的示例是可行的,只需稍微调整约束,如下所示:

routes.MapRoute("Product", "{any}/{reference}", new { controller = "Home", action = "Product", reference = UrlParameter.Optional }, new { any = @"^p-(.*)" });

约束^p-意味着不仅URL必须以p-开头,而且它也必须只是p-即它不能满足URL中的任何其他文本

向约束添加(.*)意味着URL可以以其他任何方式结束