我想知道是否可以在DelegatingHandler的SendAsync方法中访问正在执行(或即将执行)的控制器?我似乎无法弄清楚如何访问它,我认为这是因为它在控制器执行之外执行…
可以参考吗?
解决方法
不,因为消息处理程序在原始HttpRequestMessage或原始HttpResponseMessage上运行(在连续的情况下).实际上,没有使用DelegatingHandlers“当前控制器执行”的概念,因为在控制器返回响应之后,在将请求发送到控制器之前或者(再次,在连续的情况下)将调用消息处理程序.
但是,这实际上取决于你要做的事情.
如果您想知道请求最终将被路由到哪个控制器,您可以手动调用将在内部选择控制器的机制.
public class MyHandler : DelegatingHandler { protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,System.Threading.CancellationToken cancellationToken) { var config = GlobalConfiguration.Configuration; var controllerSelector = new DefaultHttpControllerSelector(config); // descriptor here will contain information about the controller to which the request will be routed. If it's null (i.e. controller not found),it will throw an exception var descriptor = controllerSelector.SelectController(request); // continue return base.SendAsync(request,cancellationToken); } }