在 Web API 调用中使用多个委托处理程序

Using multiple delegating handlers in a web API call

我有一个 Web API 调用需要使用 2 个委托处理程序,但我似乎从未进入第二个处理程序。该路由已向处理程序注册。我不允许在全局配置中设置处理程序。

 DelegatingHandler[] handlers = new DelegatingHandler[2];
        handlers[0] = new HandlerA();
        handlers[1] = new HandlerB();

        RouteTable.Routes.MapHttpRoute(
            name: "TestAPI",
            routeTemplate: "api/{controller}",
            handler: HttpClientFactory.CreatePipeline(
                innerHandler: new HttpClientHandler(),
                handlers: handlers
            ),
            defaults: new { controller = "test"},
            constraints: null
        );

HandlerA 触发断点,没有进一步的问题。

 protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
        if (request == null)
            throw new ArgumentNullException("request");

        //Breakpoint is hit
        return base.SendAsync(request, cancellationToken);
    }

我期望到达 HandlerB 但它从来没有到达,它直接进入 API 控制器。处理程序 A 不对请求执行任何操作。

我在这个博客 post 中找到了问题的答案:http://byterot.blogspot.nl/2012/05/aspnet-web-api-series-messagehandler.html

第一个处理程序将第二个处理程序设置为内部处理程序,而不是为 API 路由提供处理程序数组。

DelegatingHandler[] handlers = new DelegatingHandler[2];
handlers[0] = new HandlerA();
handlers[1] = new HandlerB();
handlers[0].InnerHandler = handlers[1];

RouteTable.Routes.MapHttpRoute(
        name: "TestAPI",
        routeTemplate: "api/{controller}",
        handler: handlers[0],
        defaults: new { controller = "test"},
        constraints: null
    );