特定のコントローラーに対してのみ、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/ リクエストの MessageHandler 内に制御が入っていないことです。