2010-03-13 55 views
3

我想在將它傳遞到標準的MVC路由邏輯之前,將一個傳入的URL解析爲它的組件部分以進行一些預處理。例如,給定的標準路線是否可以將URL解析爲複合組件?

{controller}/{action}/{id} 

和URL

/user/show/10 

有沒有辦法有路由系統返回包含控制器,動作以及與它們對應的值ID鍵的字典?

+0

查找UrlTemplate,UrlTemplateMatch。 – 2010-03-13 18:20:06

+0

@John:剛試過這個...和谷歌搜索結果返回....這個問題:)你會發佈一個答案的細節? – 2010-03-13 19:13:41

+0

我剛剛閱讀了他們(昨天),並沒有使用它們。請參閱http://msdn.microsoft.com/en-us/library/bb675245.aspx。 – 2010-03-14 01:14:21

回答

1

這很簡單,路由系統在應用程序啓動初始化,它會根據當前上下文的路由數據,所以隨時隨地上下文本身是最新的,你都好。

在Global.asax中的的Application_BeginRequest方法,例如,你可以得到當前的路由數據,像這樣:

var routedata = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context)); 

反過來的RouteData有RouteValueDictionary存儲在其價值屬性的當前請求它具有存儲在DataTokens屬性中的數據標記。

Paul

+0

我必須安排一些時間來檢查這一點,但它看起來正是我所追求的。 – 2010-03-22 21:35:48

0

MVC已經爲你做了這個。您可以訪問控制器內的RouteData屬性。

如果你定義了你想在MVC路由邏輯之前截取路由數據的位置,我可能會回答得更好。

+0

我已經考慮到了這一點,但我目前正在使用HttpApplication.BeginRequest方法中的url--我相信在路由系統有機會獲取URL之前調用該方法。我希望有一些方法可以簡單地調用一些路由方法,並讓它從url中返回一個RouteData。 – 2010-03-13 18:58:27

0

您是否嘗試過在'/'字符上分割字符串?這會給你一個路徑部分的序數組。

var parts = url.substring(1).Split('/'); 
var controller = parts[0]; 
var action = parts[1]; 
var id = parts[2]; 
+0

我真的需要看到路由系統如何看到它 - 而不僅僅是分離的URL。一些使用中的路線有多個參數,所以網址拆分不會起作用。 – 2010-03-13 18:56:57