Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 30s
使用ASP.NET Core開發和測試RESTful API是任何現代後端開發者的實用技能。 在他的《Adding Health Checks - Building a Sample API in C# Course》教學影片中,Tim Corey演示了如何構建一個帶有健康檢查的樣本API。 這篇文章完全基於Tim的講稿,逐步解釋整個過程,涵蓋了公用async Task的使用、int id、var app以及其他HTTP請求方法等關鍵點。
讓我們深入了解Tim Corey如何使用Visual Studio Code在C# API專案中設置健康檢查。
Tim解釋說,樣本API是學習網頁開發時一個強大的工具。 它允許開發者使用GET、POST、PUT和DELETE方法進行API呼叫模擬,並附帶適當的請求資料和狀態程式碼。 Tim構建的API支持:
具有資料模型的樣本資料
API請求的RESTful行為
JSON格式的響應
健康檢查
作為Docker容器和Web應用程式部署
Tim在Visual Studio Code中打開專案,並右鍵點擊Dependencies來管理NuGet程式包。 他搜尋並安裝了AspNetCore.HealthChecks.UI.Client程式包。 這使應用能夠支持兩種型別的健康檢查。
Tim在API專案資料夾中新增了一個名為HealthChecks的新資料夾。 在這裡,他建立了多個實現IHealthCheck介面的類,每個類代表不同的狀態:健康、退化、不健康和隨機。
這個類使用公用async Task<HealthCheckResult>實現返回HealthCheckResult.Healthy:
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));Return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."))這模擬了一個健康狀態,對測試前端如何處理穩定服務非常有用。
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));Return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."))此檢查返回退化服務響應。 這是一種簡單的方法來模擬部分失敗或性能問題。
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));Return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."))這模擬了一個失敗的服務,模擬您預期500 HTTP狀態程式碼或返回NotFound()的情況。
此健康檢查使用隨機整數來模擬三種狀態之一:
int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};Dim randomResult As Integer = Random.Shared.Next(1, 4)
Return randomResult Select Case
Case 1
Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
Case 2
Task.FromResult(HealthCheckResult.Degraded("This is a test random service."))
Case 3
Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service."))
Case Else
Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
End SelectTim強調這在測試變數條件下的行為時很有用。
Tim在啟動或配置資料夾中新增了一個名為HealthChecksConfig.cs的靜態類。 此類包含兩個靜態方法:
services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });services.AddHealthChecks() _
.AddCheck(Of RandomHealthCheck)("random", tags:=New String() {"random"}) _
.AddCheck(Of HealthyHealthCheck)("healthy", tags:=New String() {"healthy"}) _
.AddCheck(Of DegradedHealthCheck)("degraded", tags:=New String() {"degraded"}) _
.AddCheck(Of UnhealthyHealthCheck)("unhealthy", tags:=New String() {"unhealthy"})這將為ASP.NET Core的服務容器中的依賴注入註冊所有健康檢查。
app.MapHealthChecks("/health");app.MapHealthChecks("/health")這建立了一個單一端點/health,評估所有服務的整體健康狀態。 如果有任何不健康的,整個檢查返回不健康。
為了測試單個組件,Tim使用標籤映射每個健康檢查:
app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});app.MapHealthChecks("/health/healthy", New HealthCheckOptions With {
.Predicate = Function(x) x.Tags.Contains("healthy")
})他將這個流程重複應用於/health/degraded,/health/unhealthy和/health/random。 每一個都允許開發者測試特定行為以及前端如何對其反應。
當存取/health/random時,輸出會隨著隨機結果在"健康"、"退化"和"不健康"之間變化。
Tim通過為每個健康檢查路由啟用UI響應來增強端點。 這提供了一個JSON輸出:
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", New HealthCheckOptions With {
.ResponseWriter = AddressOf UIResponseWriter.WriteHealthCheckUIResponse
})這允許檢查每個健康檢查的資料,如持續時間、標籤和狀態。 然後,Tim為每個健康端點建立了UI版本:
/healthui/healthy
/healthui/degraded
/healthui/unhealthy
/healthui/random
每個都回應一個詳細的JSON格式,非常適合RESTful API和從移動裝置或網頁進行測試。
Tim強調,即使擁有這些功能,Program.cs仍然只有21行。 他將此歸因於:
良好的專案資料夾結構
將模型放在Models資料夾中
在它們自己的資料夾中放置端點和控制器
為每個健康檢查類使用async Task方法
他還強調這個樣本API在生產環境中非常有用,可用於部署前模擬延遲或故障。
"除了對它進行GET調用,我們還可以使用這個API進行更多測試,"Tim總結道。
Tim預告下一課,將新增模擬緩慢(例如5秒延遲)和錯誤如返回NotFound()或返回BadRequest(),以進一步測試API行為。
在這個影片教學中,Tim Corey系統地講解了如何使用ASP.NET Core構建一個帶有整合健康檢查的最小API。 關鍵組件包括:
健康檢查類(Healthy, Degraded, Unhealthy, Random)
通過AddHealthChecks()進行依賴注入
使用MapHealthChecks()映射端點
支持結構化JSON回應
這種方法更容易驗證REST API、模擬故障及加強開發和生產環境中的Web應用程式。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy