2024-10-14 004_學寫API_解釋Program_cs文件中的代碼
當然,讓我逐行為您解釋這個 Program.cs
文件中的代碼。
NLog 初始化與設置
1 2 3 4 5
| using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NLog; using NLog.Web;
|
using
關鍵字引用了相關的命名空間,這些命名空間中包含了程序所需的各種類型。
Microsoft.AspNetCore.Builder
:包含應用程序的管道設置,例如中間件。
Microsoft.Extensions.DependencyInjection
:提供依賴注入相關的功能。
Microsoft.Extensions.Hosting
:用於管理應用程序的生命周期和環境配置。
NLog
和 NLog.Web
:用於 NLog 日誌系統的配置。
1 2
| var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Debug("init main");
|
- 初始化 NLog 日誌系統,並加載應用程序的設置 (
LoadConfigurationFromAppSettings()
),這些設置可以來自 NLog.config
文件或 appsettings.json
中。
GetCurrentClassLogger()
返回一個用於記錄的 logger 實例。
logger.Debug("init main")
:寫入一條日誌記錄,記錄級別是 Debug
,表示這是一條調試信息。
嘗試構建 Web 應用程序
1 2 3
| try { var builder = WebApplication.CreateBuilder(args);
|
- 使用
WebApplication.CreateBuilder(args)
創建 Web 應用程序的構建器,傳遞命令行參數 args
。
添加 NLog 到服務中
1 2 3
| builder.Logging.ClearProviders(); builder.Host.UseNLog();
|
builder.Logging.ClearProviders()
:清除默認的日誌記錄提供程序,確保我們只使用 NLog 來處理日誌。
builder.Host.UseNLog()
:告訴應用程序使用 NLog 來進行日誌記錄。
添加服務到容器中
1 2 3 4
| builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();
|
builder.Services.AddControllers()
:將控制器添加到應用程序的服務容器中,這樣才能夠處理 HTTP 請求。
builder.Services.AddEndpointsApiExplorer()
:這個方法添加了一個終端點 API 瀏覽器,通常用於查看 API 的端點。
builder.Services.AddSwaggerGen()
:添加 Swagger
生成器服務,這將為應用程序生成 API 文檔。
構建應用程序
1
| var app = builder.Build();
|
配置 HTTP 請求管道
1 2 3 4 5 6
| if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); }
|
- 配置應用程序的請求處理管道。
if (app.Environment.IsDevelopment())
:檢查當前應用是否處於開發環境中。
- 如果是開發環境,則啟用
Swagger
和 SwaggerUI
,用於生成並展示 API 文檔。
1 2
| app.UseHttpsRedirection(); app.UseAuthorization();
|
app.UseHttpsRedirection()
:自動將 HTTP 請求重定向為 HTTPS,強制使用加密通信。
app.UseAuthorization()
:設置應用程序的授權中間件來處理身份驗證和授權。
app.MapControllers()
:將控制器映射到路由中,這樣應用程序可以找到控制器並處理對應的請求。
app.Run()
:啟動應用程序,等待並處理進入的 HTTP 請求。
捕獲異常
1 2 3 4 5 6 7 8 9 10
| } catch (Exception ex) { logger.Error(ex, "Stopped program because of exception"); throw; } finally { LogManager.Shutdown(); }
|
try...catch
檢測程序執行時的異常。
- 在
catch
中,如果發生異常,就用 logger.Error(ex, "Stopped program because of exception")
記錄錯誤日誌。
finally
中的 LogManager.Shutdown()
保證在應用程序停止時關閉所有的日誌記錄資源,進行清理。
這樣,整個程序設置好了日誌、添加了 Web API 所需的服務,並且在運行過程中會記錄各種信息(例如在發生異常時)。這些功能有助於應用的調試和追踪。