C# 以ASP.NET Core 建立WebApi (.net 6.0)專案 從頭開始 Part 2

莊創偉
Jul 26, 2021

承上篇

API Server 雖然可以順利啟動,但目前只有靜態的路由。還須加上對Controllers路由的支援。

首先建立一個 Startup.cs

Class 必須有一個入參為 IConfiguration 的建構式用來承接IHostBuilderIConfiguration

與用來添加服務的 ConfigureServices(IServiceCollection services)

及設定 Http Request處理細節的 Configure(IApplicationBuilder app, IWebHostEnvironment env)

兩個 method 都必須是 public 且名稱也不能修改。(不知道為什麼M$不用介面限制?)

接著在 ConfigureServices 中加上 services.AddControllers() 添加服務。

並在Configure 中添加 UseRouting() UseEndPoints()MiddleWare

UseRouting() 會遍歷 Controls 找到符合 request actionUseEndPoints()則是註冊路由節點,若request有符合路由節點則執行相應的委派並開始回流(Run)。

Program.cs

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():動態路由。當找不到符合的路徑時自動跳轉到指定路由。

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子