定義什么樣的路由,可以不會(huì)受請(qǐng)求參數(shù)類型和數(shù)量的限制,而被全部捕獲?
解決方案
在路由模板中,給參數(shù)添加一個(gè)“*”前綴,例如 {*param},只要請(qǐng)求的 URL 能夠和路由模板其余的部分匹配,這樣的請(qǐng)求會(huì)被全部捕獲。這個(gè)不僅適用于集中式路由,也試用于屬性路由。
工作原理
如果整個(gè)路由模板只是 {*param},那么,請(qǐng)求 URL 的整個(gè)相關(guān)部分,都會(huì)被當(dāng)作字符串參數(shù)傳入到 Action 的,可以在 Action 內(nèi)部處理或者轉(zhuǎn)。
如果有一些其他路由模板段在 {*param} 前面,這些路由模板也是會(huì)被匹配的,URL 中的參數(shù)位置將會(huì)被作為字符傳給相應(yīng) Action。
注意 因?yàn)槭褂?“*” 的路由參數(shù)意味著全部匹配,必須把這段放在路由模板的最后。例如,{*param}/{id} 是沒有意義的,因?yàn)?{*param} 類似一種短路操作,所以“id”的值永遠(yuǎn)不會(huì)被讀到。
萬能的典型應(yīng)用場(chǎng)景是,需要使用 ASP.NET Web API 作為代理,只是為了轉(zhuǎn)向到其他系統(tǒng)。如果允許客戶端通過 URL 傳入復(fù)雜查詢語句的時(shí)候,也可以使用這個(gè)萬能路由。
代碼演示
代碼片段 3-17 展示了萬能路由在集中式路由和屬性路由的定義方式。
代碼片段 3-17. WEB API 的萬能路由定義例子
在上面的兩個(gè)例子中,都屬類似短路一樣的路由,因?yàn)?,他們?huì)處理所有發(fā)給 Web API