stringURL到RouteValueDictionary

有没有简单的方法将stringURL转换为RouteValueDictionary集合? 像UrlToRouteValueDictionary(string url)一些方法。

我需要这样的方法,因为我想根据我的路由设置“parsing”URL,修改一些路由值,并使用urlHelper.RouteUrl()根据修改后的RouteValueDictionary集合生成stringURL。

谢谢。

这是一个不需要模拟的解决scheme:

 var request = new HttpRequest(null, "http://localhost:3333/Home/About", "testvalue=1"); var response = new HttpResponse(new StringWriter()); var httpContext = new HttpContext(request, response); var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); var values = routeData.Values; // The following should be true for initial version of mvc app. values["controller"] == "Home" values["action"] == "Index" 

希望这可以帮助。

你将需要创build一个模拟的HttpContext作为路由约束需要它。

这里是我用来unit testing我的路线的一个例子(它是从Pro ASP.Net MVC框架中复制的):

  RouteCollection routeConfig = new RouteCollection(); MvcApplication.RegisterRoutes(routeConfig); var mockHttpContext = new MockedHttpContext(url); RouteData routeData = routeConfig.GetRouteData(mockHttpContext.Object); // routeData.Values is an instance of RouteValueDictionary //... 

这是一个不需要实例化一大堆新类的解决scheme。

 var httpContext = context.Get<System.Web.HttpContextWrapper>("System.Web.HttpContextBase"); var routeData = System.Web.Routing.RouteTable.Routes.GetRouteData(httpContext); var values = routeData.Values; var controller = values["controller"]; var action = values["action"]; 

owin上下文包含一个包含HttpContext的环境。