DelegatingHandler继承自HttpMessageHandler。但是,我不明白两者之间的区别,因为您必须实现相同的方法,SendAsync才能使这两种方法都发挥作用。
这两个处理程序有什么区别?我应该什么时候使用每一个?
发布于 2013-09-06 19:05:21
如果您熟悉ASP.NET,那么一个很好的类比就是HTTP处理程序和模块。如果实现HttpMessageHandler,则实现Send和SendAsync方法,并返回响应或响应承诺。这类似于Http处理程序。如果您实现了一个DelegatingHandler并将它添加到config.MessageHandlers集合中,那么您的类就会在管道中运行,并有机会看到请求和响应,就像一个HTTP模块一样。DelegatingHandler也是一个HttpMessageHandler,只是作为SendAsync实现的一部分,它只调用内部处理程序的SendAsync。内部处理程序也会这样做,您将得到中国盒子或俄罗斯娃娃的效果。HttpServer,管道启动的地方本身就是一个DelegatingHandler。
发布于 2016-01-06 15:07:22
差别是非常微妙的。@Badri给了你一个很好的快速解释。
看着看这张海报,你就会意识到这是关于什么的。请记住,当您创建自己的DelegatingHandlers时,您不会处理任何不是特定HTTP内容的东西。在投篮的情况下,那不是和身体一起玩的地方。例如。
您可以做的一件有用的事情是在管道中很早就检测到报头中没有一个令牌,然后您就可以立即终止请求并创建一个StatusCode.Forbidden响应。当然,也许一个简单的网站不需要它。只是过火了。但是,如果您每分钟收到数以百万计的电话,这是非常有用的,因为它发生在控制器实际实例化之前。
只有少数几种情况下你真正需要这样做。或者说,进行rest调用的客户端只能进行GET和POST,但是在标头中它指定了一个X方法-重写= PUT,然后您就可以将请求方法从POST修改为PUT,这样控制器/动作调度程序就可以创建正确的实例并调用正确的操作。
这是一张有趣的海报。打印IT :D
http://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
https://stackoverflow.com/questions/18664515
复制相似问题