模組化的 webapi 服務,最核心的東西就是這貨了:負責請求 url 和控制器型別的對映 —— 簡單來說就是紅娘,不認識的話,小夥子你別想討到媳婦兒了。
系統內建的預設 webapi 控制器發現工廠,只能從路由資訊中獲得控制器和動作,要獲取自定義的路由資訊,只能通過重寫控制器獲取工廠ihttpcontrollerselector
來解決。按照第一章中定下的規則,使用///
路由規則,我們需要為路由引數額外讀取乙個 module 引數。
話說回來,也不一定必須使用我定下這套規則,確保你能訪問控制器即可。在這裡簡要說一下ihttpcontrollerselector
介面兩大方法的作用:
selectcontroller
用於根據路由規則獲取對應的控制器型別。
根據《webapi 外掛程式式構建方案:發現並引導程式集》這一章定下的配置檔案,是不包含 name 屬性的(即 module 路由變數),我們需要為其擴充套件,擴充套件後的結果如下(這裡只考慮在基礎配置上擴充套件):
<?xmlversion="1.0"
encoding="utf-8"
?>
enabled="true"
>
authorizationname>
授權支援外掛程式description>
type="relative"
>bin/intime.authorizationservice.dlladd>
type="relative"
>bin/intime.authorizationservice.services.dlladd>
type="relative"
>bin/intime.authorizationservice.data.dlladd>
type="relative"
>bin/intime.authorizationservice.data.repository.dlladd>
assembiles>
configuration>
在填充路由規則和控制器型別的關係對映時,讀取 name 到路由變數 module 中,生成快取項的鍵 key。下面是填充邏輯真實**:
上面說完了填充對映關係,下面繼續說selectcontroller
方法,也就是獲取對映關係。獲取對映關係就是根據客戶端傳過來的路由變數,根據填充時的規則引擎,重新生成對映關係的鍵,找到對應的控制器,再進行下一步操作。真實**如下:
new httpresponseexception(request.createerrorresponse(httpstatuscode.internalservererror, "有多個控制器符合這個請求!"
相信用心看到這裡的人,心裡已經隱隱明白了寫什麼。留個作業來檢驗下你的成果吧:如果要針對同乙個功能,開發兩個版本,此時該如何修改呢?
1 1 1 WebAPI構建解決方案
為了讓讀者先對asp.net web api 有乙個感性的認知,我們手動建立乙個 web api程式 建立乙個空的專案,然後新增一下內容 common 空的類庫專案。webapi 空的asp.net web 應用,引用common webhost 空的asp.net web 應用,它實現了針對asp...
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...