2015-11-21 95 views
1

我希望海基会的网址添加到我的应用程序,因此不是像链接:
/home/product/{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路由映射器同时看到第1个p-和第2个p-,并由于某种原因忽略了我指定的路由。

我认为在路线图中指定一个URL为p-{any}/{reference}意味着如果URL 开始与p-它会匹配??

如何解决此问题的任何帮助将不胜感激!

UPDATE
我试图路由映射以不同的方式加入了约束和改变URL是这样的:

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

这种方法不工作都不过。

回答

0

解决

在UPDATE给出的例子(上文)是可行的,它只需要一个微小的调整到约束,如下:

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

约束^p-意味着不仅必须该URL以p开始,但它也必须只是p-即它不适合URL中的任何其他文本

(.*)添加到约束意味着UR L可以结束任何其他事情