【发布时间】:2013-11-27 15:58:47
【问题描述】:
我在测试路由时遇到问题,我认为这是由于路由使用了自定义处理程序。
This question 指出了类似的问题,但并不能完全解决我正在做的事情。
我有一个 RouteConfiguration 类,它只包含路由定义,使我能够将它们拉入应用程序以及任何测试例程:
// the route
ApiRoutes.MapHttpRoute(
name: "Custom",
routeTemplate: "api/service/{service}/{method}/{arguments}",
defaults: new { arguments = RouteParameter.Optional },
constraints: null,
handler: new ServiceDispatcher(_httpConfiguration, _controllerHelper)
);
现在,当尝试使用 similar pattern to this 模拟路线的方式进行测试时,它找不到路线 (404)。选择部分如下所示(this article 中的其他代码未显示):
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/service/foo/bar/foobar");
DefaultHttpControllerSelector controllerSelector = new DefaultHttpControllerSelector(configuration);
HttpControllerDescriptor descriptor = controllerSelector.SelectController(message);
我(受过教育?)猜测是 DefaultHttpControllerSelector,但我不知道如何或是否可以更改它以支持我正在做的事情。
那么,我可以使用自定义处理程序使当前的例程正常工作吗?还是我找错了树?
【问题讨论】:
-
查看您的代码,您似乎没有通过路由匹配运行请求...如果您注意到 Filip 的帖子,它有一个名为 RouteTester 的东西,它会调用类似
config.Routes.GetRouteData(request);...此调用启动路由匹配逻辑...控制器选择器取决于当前请求中的路由数据来选择控制器,并且由于没有路由数据,您会看到这种行为.. -
@KiranChalla 我实际上已经掌握了那部分。当 GetActionName() 调用调用 _controllerSelector.SelectController() 的 GetControllerType() 时,会抛出 404。当我尝试解决这个问题时,我将恢复测试路由是否已配置,而不是通过路由实际测试路由。
标签: c# unit-testing asp.net-web-api routes