問題
如果僅僅針對指定的路由進行某些特定的消息處理,而不是應(yīng)用于所有路由,我們應(yīng)該怎么做呢?
解決方案
ASP.NET WEB API 的很多功能都內(nèi)建了消息處理器。他們真正的威力是為消息的全局處理以及為全局的應(yīng)用程序業(yè)務(wù)處理提供比較簡單的處理機制。不過,在某一些場景下的需求是,使用消息處理器處理應(yīng)用程序指定部分的特定行為。
我們要基于每個路由配置消息處理器(DelegatingHandler),而不是在 HttpConfiguration 中注冊全局的。在 HttpRouteCollectionExtension 中有一個重載的 MapHttpRoute 方法 ,他是可以做到。
public static IHttpRoute(this HttpRouteCollection routes,string name,string routeTemplate,object defaults,object contraints,HttpMessageHandler handler)
注意 只能在集中式路由中使用,而不能在屬性路由中使用。
工作原理
在 Web API 管道中,基于路由的消息處理器是在全局消息處理器之后,HttpControllerDispatcher 之前執(zhí)行。一個叫做 HttpRouteDispatcher 的服務(wù)來負責識別給定路由是否指定了消息處理器。如果是的話,請求將交由處理器處理,否則,繼續(xù)處理,匹配 Controller。
指定路由處理器需要指定 InnerHandler 來繼續(xù)處理消息。我們必須添加一個指定路由處理器,或者,將請求交還給 HttpControllerDispatcher,如代碼片段 3-22 所示。使用這個技術(shù),只要在最后添加 HttpControllerDispatcher,在路由上可以有很多處理器,如果最后不添加 HttpControllerDispatcher 的話,就請求不到任何 Controller。
代碼片段
延伸閱讀
學習是年輕人改變自己的最好方式