2013-01-21 68 views
0

我給出3個字符串:area,controlleraction。其中一些可能具有空值,因爲在我的路線中定義了默認值。例如,如果action爲空,它將映射到Index映射區域,控制器和操作名稱爲空時爲默認值

我希望通過我的應用程序的路由傳遞這3個字符串,並獲得它們的實際值之後的任何空值映射到默認值。這可能嗎?

也許這是做這樣的事情

RouteTable.Routes.GetRouteData(context) 

可行的,但有沒有辦法做到這一點無需構建一個整體HttpContext對象?

+0

帕諾斯,我試着回答你的問題。如果你可以提供更多關於你爲什麼試圖做這樣的事情的背景以及爲什麼你需要這樣做,那會很有幫助。 –

回答

0

你需要做的第一件事就是把你的三個字符串轉換成一個可以通過路由系統傳遞的URL。你如何做到這一點取決於你創建的路線。讓我們假設你在你的路由表中的典型的默認路由:

 context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller="Home", action = "Index", id = UrlParameter.Optional } 
     ); 

然後,你將不得不使用URL模式「{面積}/{控制器}/{行動}/{ID}」建立你的URL。在你的情況下,一些字符串可能是空的,所以你的URL不會包含所有的段。例如,如果面積=「管理員」和控制器和動作都是空的,您的網址,根據這條路線,將是:

~/Admin 

當然,這引起的,如果你已經知道的路由問題你係統,爲什麼你不能通過查看路線來獲得默認值。

一旦你有你想測試的URL,你將需要創建一個HttpContentBase對象的模擬,然後通過RouteTable.Routes.GetDate(httpContext)運行它。有直接的鍋爐板代碼來做到這一點,因爲你真的不需要嘲笑組成HttpRequestBase或HttpResponseBase類的大部分。例如,有關使用Moq模擬框架模擬HttpContextBase對象的示例,請參見here

相關問題