我有许多Web API控制器和许多全局委托处理程序。 但对于1个控制器,我需要阻止调用这些处理程序中的一些(或任何)。 如果处理程序正在处理冒泡方案,我想防止冒泡并为我的控制器指定自定义DoNotBubbleHandler,或者只指定我想用于此控制器的处理程序
答案 0 :(得分:2)
您可以尝试在Per-Route Message Handlers
中定义如here所示的路径处理程序。
基本上,对于您的特定控制器,您可以指定一组不同于全局注册的处理程序:
// Custom handlers for the special controller.
DelegatingHandler[] handlers = new DelegatingHandler[] {
new MessageHandler3()
};
// Create a message handler chain with an end-point.
var routeHandlers = HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(config), handlers);
//This should be only the controller you want to use a different delegating handler
config.Routes.MapHttpRoute(
name: "Route2",
routeTemplate: "api2/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: routeHandlers
);
//global message handler
config.MessageHandlers.Add(new MessageHandler1());