加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:19:02 所属栏目:asp.Net 来源:网络整理
导读:我想知道是否可以在DelegatingHandler的SendAsync方法中访问正在执行(或即将执行)的控制器?我似乎无法弄清楚如何访问它,我认为这是因为它在控制器执行之外执行… 可以参考吗? 解决方法 不,因为消息处理程序在原始HttpRequestMessage或原始HttpResponseMess
我想知道是否可以在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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读