2008-11-14 115 views
2

我覺得我重新發明輪子在這裏,但我需要找到的採取了URL從包羅萬象,並重定向,爲另一種途徑的方式。翻譯的URL路徑

這樣做的原因是因爲我需要做一些事情,如添加會話cookie對於某些URL,然後把它們交給他們的相關動作。

什麼是實現這個的最佳方式?

在此先感謝您的幫助!

回答

2

您可以嘗試在運行時更改的母版頁。這不是最美麗的解決方案。

Theming Support

0

如果我沒有理解問題...

在你前面的問題(redirect-to-controller-but-with-a-different-master-using-a-catchall-wildcard)找你要採取從通配符:

routes.MapRoute(
    "Partner", 
    "partners/{partner}/{*wildcard}", 
    new { controller = "Partners", action = "PartnerRedirect" } 
); 

而在合作伙伴/ PartnerRedirect行動,將其發送到在通配符中指定的權利控制器/操作?

我也沒辦法做到這一點的最好辦法,但尋找方法進行單元測試的URL路徑選擇提出了這一點:

http://weblogs.asp.net/stephenwalther/archive/2008/07/02/asp-net-mvc-tip-13-unit-test-your-custom-routes.aspx

我不知道這是否是精確匹配(即。可能沒有假的東西),但它看起來像所有的數據從GetRouteData回傳給RedirectToAction方法。

0

哦,所以你不想重定向?你想要的網址留下來:

mysite.com/partners/pepsi/products/cola.htm

但服務了:

mysite.com/products/cola.htm

我在家裏沒有MVC,但難道你不能以不同的方式定義你的路線嗎?

相反的:

routes.MapRoute(
    "Partner", 
    "partners/{partner}/{*wildcard}", 
    new { controller = "Partners", action = "PartnerRedirect" } 
); 

做:

routes.MapRoute(
    "Partner", 
    "partners/{partner}/{controller}/{action}/{other stuff you need}", 
    new { /* whatever defaults you want */ } 
); 

行動現在有伴侶變量做什麼用的,你可以添加路徑約束對方,這樣唯一有效的匹配。我認爲你可以在你的動作/控制器上使用一個動作過濾器來根據合作伙伴參數(它應該在過濾器的httpcontext中,我想也是這樣)做適當的動作,這樣你就不會如果您想對合作夥伴進行一些基本檢查/操作,則必須在每個操作中重複代碼。

這裏是一個不錯的向上寫了很多的方法來皮膚貓:

http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx

0

不,它實際上是一個重定向,但重定向是不可見的用戶(在許多同樣的方式作爲一個Server.Transfer的()在Web窗體進行。

你指着只使用一個母版頁的鏈接,而我有很多的母版頁(接近200)。

我曾想過爲這些合作伙伴分配不同的路由處理程序,但主頁選擇進入了等式。

我想我將不得不創建一個ViewExtension來克服這些問題......

+0

也許有可能有你的母版頁呈現基於合作伙伴參數的用戶控件?雖然聽起來不太好。我之前沒有閱讀過有關視圖擴展的內容,所以無法評論。 – anonymous 2008-11-17 12:55:08