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的环境。