Sha*_*tin 33 c# asp.net asp.net-mvc asp.net-web-api
介绍问题
我最近发现一个呼叫ApiController行动将触发DelegatingHandler的SendAsync方法,以及到香草的调用Controller操作将不会触发它.
搜索和研究
我已经研究过Web Api,并了解到它包含HttpMessageHandler了DelegatingHandler该类的父类.这使我相信HTTP消息处理程序通常只作为Web API管道的一部分执行.
此外,Http Message Handlers在Url Routing之前运行,因此它可能不是在Web API和MVC管道之间选择的URL路由.
...考虑使用动作过滤器而不是消息处理程序[因为a]过滤器在执行URI路由后运行.
题
HttpMessageHandlersASP.NET Web API的一部分而不是ASP.NET MVC的一部分吗?HttpMessageHandlerMVC(图中的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 |
Run Code Online (Sandbox Code Playgroud)
有用的网址
Yis*_*zer 30
好吧,因为它们运行两个不同的执行路径,如果MVC路由匹配它然后执行MVCHandler,而委托处理程序仅在Api路由匹配时执行.简而言之,上图没有正确描述拆分.
委派处理程序在路由后和操作选择之前运行.路由和动作选择步骤经常混淆或交替使用,尽管它们是两个不同的步骤.
路由是将url与一组字符串段匹配以产生将RouteValues路由键映射到路由值的步骤.RouteValues然后用于行动选择.委托处理程序在这两个步骤之间运行.
在MVC中没有用于委派处理程序的等效方法,类似的方法是编写自己的处理程序,但是你在那里深入了解,尤其是链接生成.
另一种更简单的方法是编写全局过滤器,但请注意,只有在实际选择了某个操作时才会运行它.
是的,它们只是WebAPI构造.
没有确实存在,图表是错误的.最接近的是RouteHandler
匹配WebAPI路由
不,他们不是,分叉只在路由后发生.
| 归档时间: |
|
| 查看次数: |
6573 次 |
| 最近记录: |