ASP.NET Core 中间件分类
?
ASP.NET Core 中間件的配置方法可以分為以上三種,對(duì)應(yīng)的Helper方法分別是:Run(), Use(), Map()。
Run(),使用Run調(diào)用中間件的時(shí)候,會(huì)直接返回一個(gè)響應(yīng),所以后續(xù)的中間件將不會(huì)被執(zhí)行了。
Use(),它會(huì)對(duì)請(qǐng)求做一些工作或處理,例如添加一些請(qǐng)求的上下文數(shù)據(jù),有時(shí)候甚至什么也不做,直接把請(qǐng)求交給下一個(gè)中間件。
Map(),它會(huì)把請(qǐng)求重新路由到其它的中間件路徑上去。
實(shí)際中呢,Use()這個(gè)helper方法用的最多。
?
Run():
?
?這是一個(gè)使用Run方法調(diào)用的中間件,Run方法會(huì)終止整個(gè)中間件管道,它應(yīng)該返回某種類(lèi)型的響應(yīng)。
?
Use():
?
?Use看起來(lái)和Run差不多,但是多了一個(gè)next參數(shù)。next可以用來(lái)調(diào)用請(qǐng)求管道中的下一個(gè)中間件。而當(dāng)前的中間件也可以自己返回響應(yīng),這就忽略掉了next調(diào)用。
在next調(diào)用之前,我們可以寫(xiě)一些請(qǐng)求進(jìn)來(lái)的邏輯,而在next調(diào)用之后,就相當(dāng)于返回響應(yīng)了,這時(shí)候也可以寫(xiě)一些邏輯。
在本例中,我們下面還使用了Run方法注冊(cè)了另一個(gè)中間件。因?yàn)橹虚g件會(huì)按照它們注冊(cè)的順序進(jìn)行調(diào)用,所以在第一個(gè)Use方法里執(zhí)行next.Invoke()的時(shí)候,就會(huì)執(zhí)行下面Run所調(diào)用的中間件。
?
Map():
?
?Map方法可以把請(qǐng)求路由到其它的中間件上面。
在這里,如果請(qǐng)求的路徑以/jump結(jié)尾,那么它所對(duì)應(yīng)的handler方法,也就是HereIAm方法的中間件就會(huì)被調(diào)用,并返回一個(gè)響應(yīng)。
而如果請(qǐng)求的路徑不是以/jump結(jié)尾,那么HereIAm方法里面的中間件就不會(huì)被調(diào)用。
?
中間件Class
上面的例子,我都是使用的inline寫(xiě)法的中間件。
而實(shí)際上,中間件通常是自成一個(gè)類(lèi)。中間件的類(lèi)需要類(lèi)似這樣:
?
?自定義的中間件類(lèi)需要由這幾部分組成:
接受一個(gè)RequestDelegate類(lèi)型的參數(shù)next的構(gòu)造函數(shù)。
按約定,還需要定義一個(gè)叫做Invoke的方法。該方法里會(huì)包含主要的業(yè)務(wù)邏輯,并且它會(huì)被請(qǐng)求管道所執(zhí)行。Invoke方法可以忽略里面的_next調(diào)用,并返回一個(gè)響應(yīng);也可以調(diào)用_next.Invoke()把請(qǐng)求發(fā)送到管道的下一站。
?
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 中间件分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Abp vNext发布v2.3!
- 下一篇: .NET Core开发实战(第28课:工