Sitemap

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

Jul 26, 2021

承上篇

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

首先建立一個 Startup.cs

Press enter or click to view image in full size

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的設定。

Press enter or click to view image in full size

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

--

--

莊創偉
莊創偉

Written by 莊創偉

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

No responses yet