定義什么樣的路由,可以不會受請求參數(shù)類型和數(shù)量的限制,而被全部捕獲?

 

解決方案

在路由模板中,給參數(shù)添加一個“*”前綴,例如 {*param},只要請求的 URL 能夠和路由模板其余的部分匹配,這樣的請求會被全部捕獲。這個不僅適用于集中式路由,也試用于屬性路由。

 

工作原理

如果整個路由模板只是 {*param},那么,請求 URL 的整個相關(guān)部分,都會被當(dāng)作字符串參數(shù)傳入到 Action 的,可以在 Action 內(nèi)部處理或者轉(zhuǎn)。

如果有一些其他路由模板段在 {*param} 前面,這些路由模板也是會被匹配的,URL 中的參數(shù)位置將會被作為字符傳給相應(yīng) Action。

 

注意 因為使用 “*” 的路由參數(shù)意味著全部匹配,必須把這段放在路由模板的最后。例如,{*param}/{id} 是沒有意義的,因為 {*param} 類似一種短路操作,所以“id”的值永遠(yuǎn)不會被讀到。

 

萬能的典型應(yīng)用場景是,需要使用 ASP.NET Web API 作為代理,只是為了轉(zhuǎn)向到其他系統(tǒng)。如果允許客戶端通過 URL 傳入復(fù)雜查詢語句的時候,也可以使用這個萬能路由。

 

代碼演示

代碼片段 3-17 展示了萬能路由在集中式路由和屬性路由的定義方式。

代碼片段 3-17. WEB API 的萬能路由定義例子

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

 

在上面的兩個例子中,都屬類似短路一樣的路由,因為,他們會處理所有發(fā)給 Web API