我只需要在 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 内部。