ASP.NET Core的路由是通過一個(gè)類型為RouterMiddleware的中間件來實(shí)現(xiàn)的。如果我們將最終處理HTTP請(qǐng)求的組件稱為HttpHandler,那么RouterMiddleware中間件的意義在于實(shí)現(xiàn)請(qǐng)求路徑與對(duì)應(yīng)HttpHandler之間的映射關(guān)系。對(duì)于傳遞給RouterMiddleware中間件的每一個(gè)請(qǐng)求,它會(huì)通過分析請(qǐng)求URL的模式并選擇并提取對(duì)應(yīng)的HttpHandler來處理該請(qǐng)求。除此之外,請(qǐng)求的URL還會(huì)攜帶相應(yīng)參數(shù),該中間件在進(jìn)行路由解析過程中還會(huì)根據(jù)生成相應(yīng)的路由參數(shù)提供給處理該請(qǐng)求的Handler。為了讓讀者朋友們對(duì)實(shí)現(xiàn)在RouterMiddleware的路由功能具有一個(gè)大體的認(rèn)識(shí),我們照例先來演示幾個(gè)簡單的實(shí)例。[本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]
目錄
一、注冊(cè)請(qǐng)求路徑與HttpHandler之間的映射
二、設(shè)置內(nèi)聯(lián)約束
三、為路由參數(shù)設(shè)置默認(rèn)值
四、特殊的路由參數(shù)
一、注冊(cè)請(qǐng)求路徑與HttpHandler之間的映射
ASP.NET Core針對(duì)請(qǐng)求的處理總是在一個(gè)通過HttpContext對(duì)象表示的上下文中進(jìn)行,所以上面我們所說的HttpHandler從編程的角度來講體現(xiàn)為一個(gè)RequestDelegate的委托對(duì)象,因此所謂的“路由注冊(cè)”就是注冊(cè)一組具有相同默認(rèn)的請(qǐng)求路徑與對(duì)應(yīng)RequestDelegate之間的映射關(guān)系。接下來我們就同一個(gè)簡單的實(shí)例來演示這樣的映射關(guān)系是如何通過注冊(cè)RouterMiddleware中間件的方式來完成的。
我們演示的這個(gè)ASP.NET Core應(yīng)用是一個(gè)簡易版的天氣預(yù)報(bào)站點(diǎn)。如果用戶希望獲取某個(gè)城市在未來N天之內(nèi)的天氣信息,他可以直接利用瀏覽器發(fā)送一個(gè)GET請(qǐng)求并將對(duì)應(yīng)城市(采用電話區(qū)號(hào)表示)和天數(shù)設(shè)置在URL中。如下圖所示,為了得到成都未來兩天的天氣信息,我們發(fā)送請(qǐng)求采用的路徑為“weather/028/2”。對(duì)于路徑“weather/0512/4”的請(qǐng)求,返回的自然就是蘇州未來4天的添加信息。