我想在將它傳遞到標準的MVC路由邏輯之前,將一個傳入的URL解析爲它的組件部分以進行一些預處理。例如,給定的標準路線是否可以將URL解析爲複合組件?
{controller}/{action}/{id}
和URL
/user/show/10
有沒有辦法有路由系統返回包含控制器,動作以及與它們對應的值ID鍵的字典?
我想在將它傳遞到標準的MVC路由邏輯之前,將一個傳入的URL解析爲它的組件部分以進行一些預處理。例如,給定的標準路線是否可以將URL解析爲複合組件?
{controller}/{action}/{id}
和URL
/user/show/10
有沒有辦法有路由系統返回包含控制器,動作以及與它們對應的值ID鍵的字典?
這很簡單,路由系統在應用程序啓動初始化,它會根據當前上下文的路由數據,所以隨時隨地上下文本身是最新的,你都好。
在Global.asax中的的Application_BeginRequest方法,例如,你可以得到當前的路由數據,像這樣:
var routedata = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));
反過來的RouteData有RouteValueDictionary存儲在其價值屬性的當前請求它具有存儲在DataTokens屬性中的數據標記。
Paul
我必須安排一些時間來檢查這一點,但它看起來正是我所追求的。 – 2010-03-22 21:35:48
MVC已經爲你做了這個。您可以訪問控制器內的RouteData屬性。
如果你定義了你想在MVC路由邏輯之前截取路由數據的位置,我可能會回答得更好。
我已經考慮到了這一點,但我目前正在使用HttpApplication.BeginRequest方法中的url--我相信在路由系統有機會獲取URL之前調用該方法。我希望有一些方法可以簡單地調用一些路由方法,並讓它從url中返回一個RouteData。 – 2010-03-13 18:58:27
您是否嘗試過在'/'字符上分割字符串?這會給你一個路徑部分的序數組。
var parts = url.substring(1).Split('/');
var controller = parts[0];
var action = parts[1];
var id = parts[2];
我真的需要看到路由系統如何看到它 - 而不僅僅是分離的URL。一些使用中的路線有多個參數,所以網址拆分不會起作用。 – 2010-03-13 18:56:57
查找UrlTemplate,UrlTemplateMatch。 – 2010-03-13 18:20:06
@John:剛試過這個...和谷歌搜索結果返回....這個問題:)你會發佈一個答案的細節? – 2010-03-13 19:13:41
我剛剛閱讀了他們(昨天),並沒有使用它們。請參閱http://msdn.microsoft.com/en-us/library/bb675245.aspx。 – 2010-03-14 01:14:21