API Server 雖然可以順利啟動,但目前只有靜態的路由。還須加上對Controllers路由的支援。
首先建立一個 Startup.cs
Class 必須有一個入參為 IConfiguration 的建構式用來承接IHostBuilder的IConfiguration
與用來添加服務的 ConfigureServices(IServiceCollection services)
及設定 Http Request處理細節的 Configure(IApplicationBuilder app, IWebHostEnvironment env)
兩個 method 都必須是 public 且名稱也不能修改。(不知道為什麼M$不用介面限制?)
接著在 ConfigureServices 中加上 services.AddControllers() 添加服務。
並在Configure 中添加 UseRouting() 與 UseEndPoints()的 MiddleWare。
UseRouting() 會遍歷 Controls 找到符合 request 的 action,UseEndPoints()則是註冊路由節點,若request有符合路由節點則執行相應的委派並開始回流(Run)。
Program.cs 改為使用Startup的設定。
對 Controllers的路由解析服務主要共有4 + 1種,詳細的差異可以參考這裡或這裡。
稍微簡單分類一下:
AddMvcCore():最輕量。僅有路由解析的必要服務,其他如身分驗證或資料驗證等功能就需再額外引用。
AddControllers():次輕量。使用 WebApi首選,比AddMvcCore 多了資料、身分驗證跟cors等等相關的服務。
AddControllersWithViews():包含AddControllers 再加上view page的支援,使用標準MVC 服務可選。
AddRazorPages():支援 RazorPage 與部分AddControllers 的功能。前端打算用RazorPage,又不需要太多API支援時選用。
AddMVC():最完整也最肥的服務。
EndPoint 的 Mapping 方法也有數種可以選擇,簡單介紹一下與 control 相關的方法:
MapControllers():將 UseRouting() 的結果註冊到端點。
MapDefaultControllerRoute():同 MapControllers() 只是多設置一條{controller=Home}/{action=Index}/{id?} 的預設路徑。
MapControllerRoute():手動設定端點的路由。
MapAreaControllerRoute():與MapControllerRoute()同,路徑多了Area的前綴。
MapDynamicControllerRoute():動態路由。自定義路由規則
MapFallbackToController():動態路由。當找不到符合的路徑時自動跳轉到指定路由。