當我們在Visual Studio 建出 一個ASP.NET Web Application 的時候, 會自動有Controllers 的 資料夾。 其餘其他的是我們自己做的資料夾。 以下會解釋Controllers、Docs、EmailTemplate、Models、Services資料夾中的程式,分別如何運作
1. Controllers 資料夾
名字來源於 Control (控制), Controllers (控制器) 是 Web API 的核心組件,負責處理 HTTP 請求並返回 HTTP 回應。每個控制器地下會有一組相關的 API ,每個API對應一個 HTTP 動詞(如 GET、POST、PUT、DELETE)並處理邏輯, 以及迴圈一個東西。
常用命名
平常關於使用者賬號會做成一個Controllers, 名叫 AccountControllers.
那其系統裡面的功能會在另外Controllers 檔案。
程式碼
- 使用多個外部套件和命名空間
namespace Stanec.Controllers用namespace 來組織程式碼
[Route("Account")]這是一個屬性,意味著當客戶端發送請求到 http://<yourdomain>/Account 時,這個控制器會處理這些請求。- 通過建構函式(Constructor)將不同的服務(Service)和資源注入到 AccountController 中,以便控制器可以使用這些服務來處理帳戶相關的業務邏輯和操作
- API 列表
了解更多Service 請參考 5. Services 資料夾
要寫出第一個API 請參考 [ASP.NET WebAPI] #4 寫第一支API
<br/>
2. Docs 資料夾
這個資料夾通常用來存放專案的文件資料,如 API 的使用說明。
目前會按照Controllers 有幾個, 那文件會有幾個。 每一隻API 會有各自的註解, 會有Request, Response 的 註解。
了解怎麼設定註解請參考 [ASP.NET WebAPI] #5 Swagger UI如何在C#上使用
<br/>
3. EmailTemplate 資料夾
此資料夾通常存放郵件範本(如 HTML 或文本格式的郵件內容)。這些範本可以被程式用來動態生成郵件,例如註冊確認、密碼重設等。關於寄送Email 的程式不在這邊, 會在Service中被解釋。
Code 會在寄送Email的時候被代替
<br/>
4. Models 資料夾
Models(模型)資料夾包含了應用程式使用的資料結構,這些結構通常反映了資料庫的結構或傳輸層的資料結構(DTO-Data Transfer Object)。 常用檔案: ClassBaseDB.cs、DBData.cs、ReqData.cs、ResData.cs
A. ClassBaseDB.cs
宣告將從資料庫接收的資料
Public virtual DbSet<User1> User { get; set; } 我们可以从数据库中获取 User1 数据。
<br/>
B. DBData.cs
宣告新的資料格式, Request 與 Response 除外
<br/>
C. ReqData.cs
宣告Request(請求)的資料格式
<br/>
D. ResData.cs
宣告Response(回复)的資料格式
<br/>
5. Services 資料夾
Services 資料夾裡面主要有Interfaces 跟 Services. Services 主要提供一種抽象層,使代碼更加模塊化、可擴展和易於維護。 <br/> 依賴注入(Dependency Injection)是一種把某種功能/服務注入到主要程式裡面, 簡單來說是把一些功能/服務寫在別的檔案裡面。 這樣子有助於讓程式碼更簡潔,易於測試
// ClassBaseDB
private readonly StanecDbContext _dbcontext;
private readonly IWebHostEnvironment _env;
private readonly IEncryption _aesCrypto;
private readonly IGmail _gmail;
private readonly IEmailTemplate _emailTemplate;
private readonly IJwtAuthUtil _jwtAuthUtil;
private readonly IJwtAuthFilter _jwtAuthFilter;
public AccountController(StanecDbContext dbcontext, IWebHostEnvironment env, IEncryption aesCrypto, IGmail gmail, IEmailTemplate emailTemplate, IJwtAuthFilter jwtAuthFilter, IJwtAuthUtil jwtAuthUtil)
{
_dbcontext = dbcontext;
_env = env;
_aesCrypto = aesCrypto;
_gmail = gmail;
_emailTemplate = emailTemplate;
_jwtAuthFilter = jwtAuthFilter;
_jwtAuthUtil = jwtAuthUtil;
}
這邊的程式是在做Dependency Injection, 把各個服務拿來Controllers 使用。
