使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由
路由機(jī)制會(huì)把一個(gè)請(qǐng)求的URI映射到一個(gè)Controller上面的Action,所以當(dāng)你發(fā)送一個(gè)HTTP請(qǐng)求的時(shí)候,MVC框架會(huì)解析這個(gè)請(qǐng)求的URI,并嘗試著把它映射到一個(gè)Controller上面的Action。
?
兩個(gè)路由中間件
在ASP.NET Core 3.x里面,建議使用Endpoint路由來進(jìn)行設(shè)置。但是我們需要先在請(qǐng)求的管道里面添加兩個(gè)中間件:
app.UseRouting()。它是用來標(biāo)記路由決策在請(qǐng)求管道里發(fā)生的位置,也就是在這里會(huì)選擇端點(diǎn)。
app.UseEndpoints()。它是用來標(biāo)記選擇好的端點(diǎn)在請(qǐng)求管道的什么地方來執(zhí)行。
這樣做的好處就是,我們可以在選擇端點(diǎn)和執(zhí)行端點(diǎn)的中間位置插入其它的中間件。這樣的話,插入到中間位置的中間件就會(huì)知道哪個(gè)端點(diǎn)被選取了,而且它也有可能會(huì)選擇其它的端點(diǎn)。
?
一個(gè)非常好的例子就是授權(quán)中間件:
如果授權(quán)成功,那么就繼續(xù)執(zhí)行到之前選定的端點(diǎn),否則的話就會(huì)跳轉(zhuǎn)到其它端點(diǎn)或者短路返回。
?
官方文檔:Startup里面路由配置的官方文檔。
?
映射端點(diǎn)
還是可以有兩種方式進(jìn)行設(shè)置:基于約定 或者 基于屬性。
基于約定的路由,例如這兩種:
這種方式更適合于服務(wù)器端的Web應(yīng)用程序。
?
而針對(duì)Web API,使用基于屬性的路由更加適合:
可以看到,這里面僅僅映射了Controller,并沒有使用任何約定,所以我們需要采用屬性(Attribute)來進(jìn)行設(shè)定。這里需要用到屬性(attribute)和URI模板。
屬性(Attribute)。例如[Route],[HttpGet],[HttpPost]等等,可以把它們放在Controller級(jí)別,也可以放在Action級(jí)別上。
URI模板。將屬性結(jié)合URI模板一起使用,就可以把請(qǐng)求映射到Controller的Action上面。
?
例如:
?
官方文檔:路由基礎(chǔ)知識(shí)。
官方文檔請(qǐng)點(diǎn)擊原文鏈接.
總結(jié)
以上是生活随笔為你收集整理的使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 给 IConfiguration 写一个
 - 下一篇: EFCore批量操作,你真的清楚吗