0

У меня есть вызов веб-API, который должен использовать 2 делегирующих обработчика, но я никогда не попадаю во второй обработчик. Маршрут регистрируется обработчиками. Мне не разрешено устанавливать обработчики в глобальной конфигурации.Использование нескольких обработчиков делегирования в вызове веб-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 не делает ничего для запроса.

ответ

0

Я нашел ответ на мою проблему в этом блоге: 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 
    ); 

 Смежные вопросы

  • Нет связанных вопросов^_^