如何为ASP.NET WebAPI 2中使用路由属性的特定控制器添加MessageHandler?

Ciu*_*rin 8 asp.net asp.net-web-api routeattribute asp.net-web-api2 message-handlers

是否可以仅为使用路由属性的特定控制器添加MessageHandler?

如果它不包含某些标头,我想在管道中提前删除请求.我想提一下:

  • 我无法在WebApiConfig中添加其他路由,我们必须使用控制器中的路由属性.

  • 我不想全局添加MessageHandler.

  • 它必须是MessageHandler(在管道的早期).我们有替代方案,但我们正在努力提高效率.

例如,我用以下RoutePrefix修饰了控制器:api/myapicontroller和一个带有Route("")的动作.(我知道这很奇怪,我们正在根据查询字符串选择不同的动作)

然后,我补充说

config.Routes.MapHttpRoute(
        name: "CustomRoute",
        routeTemplate: "api/myapicontroller/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: null,
        handler: new myMessageHandler()  
    );    
Run Code Online (Sandbox Code Playgroud)

如果我在config.MapHttpAttributeRoutes();执行myMessageHandler 之前放置此代码,但是我收到此消息:

控制器'myapicontroller'上没有找到与请求匹配的操作

如果我config.MapHttpAttributeRoutes();先放,myMessageHandler永远不会被执行,但调用myapicontroller中的my动作.

Aja*_*hya -1

MS 文档中的这篇文章解释了相同的内容。最后,他们提供了一种拥有特定于控制器的处理程序的方法。但这只是传统的路由。我不知道这是否对你有帮助。

config.Routes.MapHttpRoute(
    name: "MyCustomHandlerRoute",
    routeTemplate: "api/MyController/{id}",
    defaults: new { controller = "MyController", id = RouteParameter.Optional },
    constraints: null,
    handler: HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(config), new MyCustomDelegatingMessageHandlerA());
);
Run Code Online (Sandbox Code Playgroud)