IRONSOFTWAREHOME

在 C# 課程中管理 CORS 和測試 - 構建一個範例 API

管理CORS與測試 - 建立C#課程的範例API

Tim Corey

16分鐘 06秒

當您在C#中使用Web API時,CORS(跨來源資源共享)常常成為一個障礙——特別是當您的前端與後端在不同的域或端口上運行時。 在現代軟體開發中,出現一個常見的情境,即API為前端客戶端(如Blazor WebAssembly、Angular或React)提供服務。

在他的影片教學中,Tim Corey 演示了如何在"C# 建立樣本 API 課程中有效管理 CORS 和測試",同時在建立和測試一個樣本 API 時有效地管理 CORS。 這種方法不僅幫助開發者解決跨域問題,也為更高級的測試技術做準備,比如單元測試、整合測試和自動化工作流程。

讓我們深入影片並逐步跟隨 Tim 的指導。

設置Blazor前端

Tim 開始課程時,建立了一個名為 SampleTestUI 的簡單 Blazor WebAssembly 前端專案。 此前端尚未準備好用於生產,而是一個測試專案,用於驗證與API的連接並故意觸發CORS問題。

  • Tim 使用 .NET 9 模板,並選擇不使用身份驗證或 PWA 功能。

前端的目的是模擬真實世界的API呼叫,並暴露與跨來源請求相關的測試失敗。

他修改了首頁,以調用 /courses API 端點並顯示附帶圖片的課程列表。

前端使用一個單獨建立的簡單模型類別 (CourseModel),而非與API共享模型。 Tim強調前端模型應與資料存取模型分離以減少耦合並提高可維護性 (2:28)。 這是在撰寫可維護的測試和可測試的程式碼時的一個重要原則。

撰寫API呼叫

從API獲取資料:

  • Tim 注入一個 HttpClient。

他使用 Http.GetFromJsonAsync<List<CourseModel>>() 撰寫了一個異步方法。

該方法硬編碼了當地API URL (4:00),作為驗證前端和後端之間通信的簡單測試。

這裡沒有測試方法或錯誤處理,只有一個直接的呼叫。 此設置反映了編寫單元測試的早期步驟,您首先驗證元件之間的基本互動。

構建資料擷取邏輯和UI

在凌晨4:00硬編碼API URL後,Tim專注於構建核心邏輯,以從API抓取課程資料並顯示在Blazor前端。 這是驗證前端能夠與後端互動的一個關鍵步驟,即使在撰寫自動化測試或使用測試框架之前。

首先,他確保從API的launchSettings.json中使用正確的URL,取得HTTPS地址並附加/courses以形成完整的端點。 這很重要,因為瀏覽器通常會拒絕來自安全頁面的非HTTPS API呼叫。

courses = await Http.GetFromJsonAsync<List<CourseModel>>("https://localhost:port/courses");

顯示資料

一旦資料被擷取後,Tim 使用 Razor 語法撰寫了一個簡單的 UI 迴圈來遍歷課程清單:

@foreach (var c in courses) { <a href="@c.CourseUrl"> <img width="300" src="@c.CourseImage" /> </a> }

每門課程以包裹在超連結中的圖片顯示。 Tim 注意到影像很大(1920x1080),所以他將寬度限制為 300px,以避免頁面顯得過於擁擠。

此輸出作為視覺確認API資料正確流入前端。 這模仿您期望從測試方法通過得到的反饋——如果圖片顯示出來,則請求成功。

準備發射

在運行應用程式之前,Tim在Visual Studio中配置多個啟動專案。 他設置API專案首先啟動,接著是Blazor前端。 這個順序對於確保在前端嘗試獲取資料時API已經準備好是至關重要的。

這個在6:30的最後一步為運行測試做好了準備——並遇到了CORS錯誤——這就是本教程下一部分的開始。

遭遇CORS限制

當 Tim 同時透過Visual Studio的方案總管啟動這兩個專案時,前端試圖呼叫API,但失敗了。 瀏覽器的主控台顯示了一個熟悉的訊息:

"從來源"[Frontend URL]"存取"[API URL]"已被CORS政策阻擋..."(7:02)

這就是了解和管理CORS變得至關重要的地方。 如果沒有適當的標頭,瀏覽器會阻止從一個來源到另一個來源的請求。

建立CORS配置類別

Tim沒有將程式碼塞在Program.cs中,而是在Startup資料夾中建立了一個名為CorsConfig的專用類別。 他使用靜態類別結構來套用與Swagger和OpenAPI設定相同的配置模式。

這符合乾淨程式碼的實踐,並使應用程式更具可測試性。 這樣的模組化配置也使得以後撰寫單元測試方法更加容易,因為邏輯是孤立的,且更容易模擬或覆蓋。

應用寬鬆的CORS政策

Tim 定義了一個非常開放的 CORS 策略來允許完整跨來源存取:

policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();

此設置在測試驅動開發和整合測試中非常有用,尤其是外部服務或前端應用需完全存取API時。 Tim稱這個策略為"AllowAll",並將名稱儲存在常數中以防止拼寫錯誤和不一致性 (11:00):

private const string AllowAllPolicy = "AllowAll";

他指出這不應在生產環境中使用,但在本地或 Docker 容器內測試 APIs 是理想的,特別是當開發者正在對真實端點進行實驗或撰寫單元測試時。

在 Program.cs 中整合配置

Tim在Program.cs中註冊CORS服務並應用配置:

builder.Services.AddCorsServices(); app.ApplyCorsConfig();

這種模組化設計提升了程式碼品質,並使將來加入模擬框架或注入測試行為變得更容易。 它反映了您在C#中進行單元測試的結構,其中集中化配置可以簡化測試設置。

重新測試前端

在應用CORS修正之後,Tim重新運行這兩個應用程式。 這次,Blazor前端正常運作——課程資料成功載入,每個課程圖片連結到相關的URL。

重要的是,前端未做任何更改。 整個修復是在API層面完成的,通過正確的CORS配置。

測試和設置策略的課程

雖然 Tim 在這段影片中沒有直接深入單元測試框架,但他的做法為此奠定了基礎。 操作方法如下:

他能夠清楚地分離關注點,從而在未來可以使用測試類和模擬物件。

專用的CORS設定檔可以在測試期間重複使用或用模擬配置替換。

他的快速前端專案就像手動整合測試,在撰寫完整的單元測試專案之前進行早期驗證。

這就像您在Visual Studio中進行測試的方法:

建立一個單元測試專案與您的主要應用程式並行。

使用測試探索器來執行所有測試方法並追蹤結果。

模擬外部相依項,例如HTTP請求、資料庫呼叫或設定檔案。

撰寫簡單的單元測試來驗證預期行為,然後擴展以涵蓋具有邊界情況的測試案例。


CORS場景的單元測試考量

儘管Tim的影片主要關於配置CORS,但其對軟體測試的影響是清楚的:

您可以建立單元測試方法來驗證您的配置服務。

使用模擬框架,模擬不同來源或HTTP方法等外部因素。

將測試執行作為CI/CD流程的一部分,以確保您的測試方法能夠始終通過。

將測試整合到Visual Studio Test Explorer中以追蹤失敗並確保穩定性。

結論

在這個影片教學中,Tim Corey 提供了一個管理 C# Web API 中 CORS 的實際範例,同時構建了一個簡單的 Blazor 前端來測試連接性。 他的做法不僅僅是修復瀏覽器錯誤——它建立了一個結構,鼓勵可維護的程式碼、清晰的架構,並且易於擴展到自動化測試。

從這裡開始,開發者可以充滿信心地進行單元測試的編寫、設置整合測試,並使用像Visual Studio、Test Explorer和模擬框架這樣的工具來提高程式碼的質量和可靠性。

無論您正在學習如何開始測試、撰寫第一個單元測試,還是確保測試方法在預期情況下失敗,本課程都為強大的開發過程提供了基礎。 最重要的是,一切都從獲得正確的架構和配置開始。

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立