使用自定义处理程序对Web Api路由进行单元测试

时间:2013-11-27 15:58:47

标签: c# unit-testing asp.net-web-api routes

我在测试路线时遇到问题,我认为这是由于使用自定义处理程序的路线。

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,但我不知道如何或是否可以改变以支持我正在做的事情。

那么,我可以使用自定义处理程序使这个当前例程工作还是我咆哮错误的树?

1 个答案:

答案 0 :(得分:1)

如果将MessageHandler附加到路由,则甚至不会调用控制器调度程序。它没有那么远。 如果你想测试路线,我会打电话给

    var routeDate = config.Routes.GetRouteData(request);

然后,您可以检查路由值并测试服务,方法和参数参数。