2017-05-17 36 views
0

我们已经实现了api服务。是否有可能找到控制器的类,它将处理来自其处理路径请求的处理器

我们在控制器中使用属性路由(config.MapHttpAttributeRoutes();)。

我想写一个处理程序,它需要为某些特定类型的控制器工作。

是否有可能得到的实际控制类,这将在处理

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
{ 
    //... 
} 
DelegatingHandler

的要求?

目前我可以使用他们的路径过滤它们。

+0

你确定你需要实现'DelegatingHandler'吗?您的描述清楚地指向了“ActionFilter”。在动作过滤器内部,您可以完全访问请求,控制器和被调用的动作。 –

+0

@FedericoDipuma该处理程序检查请求是否有效。如果它们无效,则修复错误响应直接从处理程序返回而不初始化控制器。如果我使用ActionFilter,据我所知控制器也被初始化。纠正我,如果我错了。 –

+0

是的,但是从我能看到你*需要*知道选择哪个控制器。从[本文档](https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf)中可以看到,控制器类型仅在任何DelegatingHandler执行之后且任何'过滤器'(在'HttpControllerDispatcher'内精确)。我不相信有任何其他的钩点。 –

回答

1

作为内部ASP.NET Web API 2: HTTP message lifecycle文件可见,控制器类型选择和创建被管道中的任何DelegatingHandler的执行之后,但在任何AuthenticationFilterAuthorizationFilterActionFilter完成。因此,如果您需要知道哪个控制器将处理请求,最好的选择是在ActionFilter(或可能是AuthorizationFilter,因此如果请求无效时可以完全跳过ModelBinding)内部实现您的逻辑。

在这里您可以使用HttpActionContext参数的ControllerContext属性访问控制器数据。

相关问题