阻止委派处理程序调用特定的Web API控制器

时间:2014-07-25 08:35:34

标签: c# asp.net-web-api

我有许多Web API控制器和许多全局委托处理程序。 但对于1个控制器,我需要阻止调用这些处理程序中的一些(或任何)。 如果处理程序正在处理冒泡方案,我想防止冒泡并为我的控制器指定自定义DoNotBubbleHandler,或者只指定我想用于此控制器的处理程序

1 个答案:

答案 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());