Применение обработчика сообщений к определенному контроллеру webapi

У меня есть требование указать MessageHandler в файле webapi.config только для определенных контроллеров.

Итак, у меня есть код в файле 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, т.е. api, записанный в файле ReportController.cs, и все остальные пропускали этот MessageHandler.

Моя проблема заключается в том, что контроль не идет внутри MessageHandler для / api / Reports / запросы.

0 ответов

Другие вопросы по тегам