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

前端之家收集整理的这篇文章主要介绍了如何为ASP.NET WebAPI 2中使用路由属性的特定控制器添加MessageHandler?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以仅为使用路由属性的特定控制器添加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()  
    );

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

No action was found on the controller ‘myapicontroller’ that matches
the request

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

解决方法

不幸的是,您无法通过AttributeRouting设置任何处理程序.如果要将处理程序分配给特定路由,则必须仅通过MapHttpRoute注册它.除非您需要在默认值部分中添加控制器名称,例如Ajay Aradhya的答案,并从您的操作中删除Route属性,因为您可以使用Route属性或MapHttpRoute方法注册路径,但不能同时注册两者.

另请注意,您需要创建管道,否则您的处理程序将工作但请求将不会命中控制器操作.
有关详细信息,请参阅类似问题的my answer.

猜你在找的asp.Net相关文章