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);
    }
}

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...