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