[英]How should a DelegatingHandler make an async call (ASP.NET MVC Web API)?
[英]Why does a call to an ASP.NET MVC Controller not execute a DelegatingHandler?
介绍问题
我最近了解到,对ApiController
Action的调用将触发DelegatingHandler
的SendAsync
方法,并且对vanilla Controller
Action的调用不会触发它。
搜索和研究
我查看了Web Api,并了解到它包含了HttpMessageHandler
,它是DelegatingHandler
类的父级。 这使我相信HTTP消息处理程序通常只作为Web API管道的一部分执行。
此外, Http Message Handlers在Url Routing之前运行 ,因此它可能不是在Web API和MVC管道之间选择的URL路由。
...考虑使用动作过滤器而不是消息处理程序[因为a]过滤器在执行URI路由后运行。
题
HttpMessageHandlers
是ASP.NET Web API的一部分,而不是ASP.NET MVC的一部分吗? HttpMessageHandler
等价物(图中的EQUIVALENT )? 我的感觉就是这样,但请纠正我。
Request from Client
|
IIS
|
ASP.NET
|
HttpApplication.BeginRequest
|
et cetera
|
HttpApplication.MapRequestHandler - is this what does the routing?
|
FORK
/ \
/ \
/ \
/ \
/ \
**Web API** **MVC**
| |
HttpControllerRouteHandler MvcRouteHandler
| |
HttpControllerHandler |
| |
HttpMessageHandlers EQUIVALENT?
i.e. |
DelegatingHandlers |
incl. |
HttpServer |
CustomHandlers |
HttpRoutingDispatcher |
HttpControllerDispatcher |
有用的网址
好吧,因为它们运行两个不同的执行路径,如果MVC路由匹配它然后执行MVCHandler,而委托处理程序仅在Api路由匹配时执行。 简而言之,上图没有正确描述拆分。
委派处理程序在路由后和操作选择之前运行。 路由和动作选择步骤经常混淆或交替使用,尽管它们是两个不同的步骤。
路由是将url与一组字符串段匹配以生成RouteValues
的步骤,该RouteValues
将路由键映射到路由值。 然后在行动选择中使用RouteValues
。 委托处理程序在这两个步骤之间运行。
在MVC中没有用于委派处理程序的等效方法,类似的方法是编写自己的处理程序,但是你在那里深入了解,尤其是链接生成。
另一种更简单的方法是编写全局过滤器,但请注意,只有在实际选择了某个操作时才会运行它。
是的,它们只是WebAPI构造。
没有确实存在,图表是错误的。 最接近的是RouteHandler
匹配WebAPI路由
不,他们不是,分叉只在路由后发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.