我想在我的应用程序中添加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-" });
这种方法根本不起作用。
答案 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可以以其他任何方式结束