2014-06-10 27 views
2

我必須爲現有網站製作虛榮網址。要求是:使用自定義路線代替/ controller/action/{id}

  • 現有的控制器是一種層次結構,不能以任何方式消失或被重寫。示例:domain.com/Dog/vanitydomain.com/Cat/vanity
  • 保留現有的操作。任何現有的操作都必須優先處理,以便該操作的頁面不會被虛榮網址壓制。
  • 拿未來的網頁和行動統一到帳戶,以便上述要求得到滿足(一個新的個性化網址被忽略,動作/視圖,而不是執行)

到目前爲止,我曾嘗試與路由,允許各種解決方案我有domain.com/vanity這是很好,但營銷人員不喜歡,因爲公司內部不同部門。我試過路由,它會覆蓋現有的操作並將它們全部視爲虛榮(也不可行)。我有一個解決方案,以編程方式處理請求的url並重定向到實際存在的頁面,但這不以任何方式擴展。

到目前爲止,我知道可以將虛榮部分作爲動作的參數,以便我可以在路由(Index)中啓動默認頁面,但到目前爲止,這並不保留結構。

TL; DR:我需要有一個解決方案,允許域/控制器/虛榮結構,同時還允許域/控制器/動作

+0

試過http://attributerouting.net/? –

+0

謝謝。沒有聽說過。我正在看它。我必須添加到網站項目中的越少越好(它將在幾個月內被替換,但現在市場營銷人員想要這樣做。) 我不假設您有一句TL;此插件的DR? – MetalPhoenix

+0

基本上(配置後),你添加'[路由(「一個區域或字符串/一些動作或字符串」)]'您的行動,並呼籲www.example.com/an-area-or-字符串/ some-action-or-string來訪問該操作。 –

回答

4

使用AttributeRouting for MVC4,直到您穩步提高,更換項目,你可以完成一個有效的解決方案定義的URL。它將允許您保留現有路線,同時添加幾乎沒有影響的新的自定義路線。

[Route("my-vanity/is-cool/post/{id}")] 
public ActionResult Index(int id) 
{ 
} 

重要的部分是記住優先級,所以你寫的路由不覆蓋/被現有路由覆蓋。您可以通過屬性上的屬性在某種程度上引導此操作。以下只是一個例子,它會將整個網站的添加路線放在最後。

[Route("my-vanity/is-cool", SitePrecedence = -1)] 
public ActionResult Index() 
{ 
} 
+0

這裏是一個爲+1 :) – jgauffin

+0

@jgauffin乾杯。我忘記了WebApi2內置了它,但是因爲它使用了與MVC 5相同的基本庫,所以這並不奇怪。 :) –

+0

感謝您的解決方案和TL; DR。 :) – MetalPhoenix

1

ASP.NET WebApi2已經內置支持屬性的路由。有了它,你可以以任何方式你喜歡的(而不是跟隨/controller/action模式)

http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

+0

即使它不是我所需要的,我仍會將其標記爲答案。這將是技術上正確的答案,但attributerouting.net評論給了我這種情況下我需要的確切解決方案:以最少的編碼和邏輯變化處理特定的虛擬網址(該網站被破解並在幾個月後離開)爲以及無需大驚小怪地將追蹤目的分配給任何動作的能力。 然而,這將成爲我們正在着手開始的替代網站的解決方案。 – MetalPhoenix

+0

然後請@J.Steen提供答案並接受該答案。 – jgauffin

+0

@MetalPhoenix:Steen已經添加了一個答案,接受這個答案,因爲它對你有用。 – jgauffin