2017-02-14 50 views
0

我需要創建網站,其中URL模式允許個性化的URL,如www.mysite.com帶來了主要的門戶網站。正確渲染MVC站點上的ActionLinks與vanityURL

www.mysite.com/customer1爲該客戶帶來了自定義門戶(同樣的動作和控制器被稱爲自定義參數將從URL中拉出)。

我希望在所有頁面上始終在URL中保留前綴'/ customer1 /'。

我有以下的路線,其做工精細:

routes.MapRoute(
    name: "CompanyUrl", 
    url: "{companyurl}/{controller}/{action}/{id}", 
    defaults: new { companyurl = UrlParameter.Optional, controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

然而,當我進入的vanityURL網站等www.mysite.com/customer1所有動作鏈接呈現確定爲

<a href="/customer1/Home/Contact">Contact</a> 

但是當我只輸入www.mysite.com,所有鏈接都呈現爲:

<a href="//Home/Testimonials">Testimonials</a> 

,我無法導航到任何地方。

如何在沒有companyurl參數且沒有附加/的情況下正確渲染它們?

回答

0

假設我理解正確的話,試試這個(雖然檢查它是否工作在整個預期):

  • 刪除默認爲{companyurl} - 這使得該路線爲「強制性」(這意味着它不會「比賽「您的CompanyUrl路由配置如果不存在並通過下一個配置,這是Default配置)。

所以你的 「CompanyUrl」 路線:

routes.MapRoute(
    name: "CompanyUrl", 
    url: "{companyurl}/{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

H個...

+0

謝謝,幫助。我沒有意識到有一個默認設置是強制性的,當我在companyurl參數上添加一個約束時,我遇到了一些其他問題,然後消失了 – Anna