2011-10-26 40 views
1

我有一個住在服務器1的ASP.NET MVC 3 Web應用程序:生成外鏈主要網站從小窗口

http://www.mysite.com

而且我有一個小工具(還ASP.NET MVC 3 Web應用程序)是住在服務器2:

http://widget.www.mysite.com

現在,我想從我的小部件生成一個鏈接到主網站。

所以,如果我做這樣的事情在Widget項目:

@Html.RouteLink("Outbound link", "MainWebsiteRoute", "http", "http://www.mysite.com", string.Empty, null) 

將錯誤(或產生錯誤的鏈接),因爲路由表是小部件和網站項目之間的不同。

即使我從主網站的路徑複製到小工具之一,控制器/行動不會在Widget項目存在,所以它不會工作。

我該怎麼做?我必須對網址進行硬編碼嗎?

回答

1

端起來欺騙從主網站,我需要在插件的路線。在主站

例路線:在小部件

context.MapRoute(
    "Q&A - Individual Q", 
    "{locationUniqueUri}/questions/{questionUniqueUri}", 
    new { controller = "Questions", action = "Detail" }, 
); 

欺騙路線:

RouteTable.Routes.MapRoute(
    "Outbound - Q&A - Individual Q", 
    "{locationUniqueUri}/questions/{questionUniqueUri}" 
); 

請注意有沒有路由默認值 - 那是因爲我不在乎,因爲這是關於匹配路由到控制器/操作。但是這發生在網站上,而不是小部件。我所關心的是生成的URL。

然後,我爲RouteLink創建了一個簡單的包裝,名爲OutboundRouteLink,它指定主機名(用於主網站)並生成鏈接。

我不認爲這是不好的解決方案。顯然,它是以某種方式硬編碼的 - 如果主網站中的路由發生變化,那麼我將不得不更改小部件路由。但很好,因爲如果我的一個網址發生了變化,我還是必須做301,所以舊的URL仍然可以用於這個小部件(他們會得到301'd)。

此外,我可以更進一步,將路由URL存儲在配置文件中,並在項目之間共享,這會給我更多的安全感。但只有大約3個出站URL,所以這應該沒問題。

不是說這是最好方式來處理它,但我很滿意它。

0

您是否在使用區域?如果不是,那麼也許你應該。這樣,您可以簡單地提供路線的區域,並且它將能夠爲您解析網址。鑑於您的示例網址,您可以用您的小部件站點作爲區域來構建主站點。在路徑值中爲area參數提供一個空字符串將允許您從小部件站點引用主站點中的控制器/操作。

+0

是的,但改變了這兩個網站的體系結構。他們是單獨的項目,原因有幾個 - 但這超出了這個問題的範圍。您的答案是基於他們需要成爲單個Web項目的事實 - 正確嗎? – RPM1984

+0

@ RPM1984 - 是的,他們需要在同一個項目中。這就是允許你重用兩者之間的路由設置。 – tvanfosson

+0

夠公平的。那不可能發生。怎麼樣一個「基地」的網絡項目,其中某些路線可以註冊並由兩個項目繼承..可能嗎? – RPM1984