在 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
);
我有一个 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
);