2010-03-01 79 views
0

是否有可能在请求的上下文之外启动nvelocity路由机制(独立应用程序或测试框架)并从url中获取url的动作和路由值?单轨解析URL到路由值

这里是一个考验,我需要弄清楚routingMethod:

var url = routingMethod.ResolveAction<MyController>(c=>c.MyAction("Foo",1)) 
Assert.AreEqual("/MyController/MyAction.rails?name=Foo&amount=1"); 

var url = "/MyController/MyAction.rails?name=Foo&amount=1"; 

IDictionary routingValues = routingMethod.DeriveRouteValuesFrom(url); 

Assert.AreEqual("MyController", routingValues["controller"]); 
Assert.AreEqual("MyAction", routingValues["action"]); 
Assert.AreEqual("Foo", routingValues["name"]); 
Assert.AreEqual(1, routingValues["amount"]); 

回答

1

如果我理解正确的话,你要采取的URL,通过路由引擎运行两种方式,要么拿到路由参数,或者从路由参数创建一个url?

您可以创建自己的RoutingEngine并将路由注册到路由引擎中,然后使用StubRequest调用路由以生成URL或将URL解析为参数。

您也可以(如果您有权访问它)直接使用RoutingModuleEx.Engine。

RoutingEngine有两个方法,一个用于匹配,另一个用于生成URL。

还有一个RouteMatch类,您可以将其用于测试目的或任何其他用途以测试RouteMatch,但是,您无法使用它生成url。

看到本页底部: http://www.castleproject.org/monorail/documentation/v20/advanced/routing.html