asp.net – 访问在DelegatingHandler中执行的当前控制器

前端之家收集整理的这篇文章主要介绍了asp.net – 访问在DelegatingHandler中执行的当前控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否可以在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);
    }
}

猜你在找的asp.Net相关文章