【问题标题】:Using multiple delegating handlers in a web API call在 Web API 调用中使用多个委托处理程序
【发布时间】:2016-06-06 14:16:21
【问题描述】:

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

 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 不对请求做任何事情。

【问题讨论】:

    标签: c# asp.net-mvc-4 asp.net-web-api .net-4.5 delegatinghandler


    【解决方案1】:

    我在这篇博文中找到了我的问题的答案: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
        );
    

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 2019-09-28
      • 1970-01-01
      • 2011-01-29
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多