0

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

4

0 回答 0