問(wèn)題

如果僅僅針對(duì)指定的路由進(jìn)行某些特定的消息處理,而不是應(yīng)用于所有路由,我們應(yīng)該怎么做呢?

 

解決方案

ASP.NET WEB API 的很多功能都內(nèi)建了消息處理器。他們真正的威力是為消息的全局處理以及為全局的應(yīng)用程序業(yè)務(wù)處理提供比較簡(jiǎn)單的處理機(jī)制。不過(guò),在某一些場(chǎng)景下的需求是,使用消息處理器處理應(yīng)用程序指定部分的特定行為。

 

我們要基于每個(gè)路由配置消息處理器(DelegatingHandler),而不是在 HttpConfiguration 中注冊(cè)全局的。在 HttpRouteCollectionExtension 中有一個(gè)重載的 MapHttpRoute 方法 ,他是可以做到。

public static IHttpRoute(this HttpRouteCollection routes,string name,string routeTemplate,object defaults,object contraints,HttpMessageHandler handler)

 

注意 只能在集中式路由中使用,而不能在屬性路由中使用。

 

工作原理

在 Web API 管道中,基于路由的消息處理器是在全局消息處理器之后,HttpControllerDispatcher 之前執(zhí)行。一個(gè)叫做 HttpRouteDispatcher 的服務(wù)來(lái)負(fù)責(zé)識(shí)別給定路由是否指定了消息處理器。如果是的話,請(qǐng)求將交由處理器處理,否則,繼續(xù)處理,匹配 Controller。

 

指定路由處理器需要指定 InnerHandler 來(lái)繼續(xù)處理消息。我們必須添加一個(gè)指定路由處理器,或者,將請(qǐng)求交還給 HttpControllerDispatcher,如代碼片段 3-22 所示。使用這個(gè)技術(shù),只要在最后添加 HttpControllerDispatcher,在路由上可以有很多處理器,如果最后不添加 HttpControllerDispatcher 的話,就請(qǐng)求不到任何 Controller。

 

代碼片段

網(wǎng)友評(píng)論