I have requirement to specify MessageHandler in webapi.config file for specific controllers only.
So, I have code in webapiconfig.cs file as follows.
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....
}
}
I want that all requests like http://hostname/api/Reports/GetSomeList to pass through the MessageHandler i.e. api written in ReportController.cs file and all other skip this MessageHandler.
My issue is, control is not going inside the MessageHandler for /api/Reports/ requests.