2015-11-21 104 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可以結束任何其他事情