将messagehandler应用于特定的webapi控制器

时间:2017-10-10 07:42:26

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

我需要在webapi.config文件中为特定控制器指定MessageHandler。

所以,我在webapiconfig.cs文件中有如下代码。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "CustomerReportHttpRoute",
            routeTemplate: "api/Reports/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: null,
            handler: new MessageHandler()
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );            
    }
}

public class MessageHandler : DelegatingHandler
{
  protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
       ....some logic fo authorization....
    }
}

我希望像http://hostname/api/Reports/GetSomeList这样的所有请求都通过MessageHandler传递,即在ReportController.cs文件中写入api,所有其他请求都跳过此MessageHandler。

我的问题是,控制不会进入/ api / Reports / requests的MessageHandler内。

0 个答案:

没有答案