要使用 `HttpClient` 存取需要授權的 RESTful API,你通常需要在請求中附加適當的身份驗證憑證,例如 JWT(JSON Web Token)。以下是完整的步驟,包括如何生成 JWT、配置 `HttpClient` 並發送授權請求。 ### 假設場景 - 你的 RESTful API 使用 JWT 作為身份驗證方式。 - 你已經擁有用戶憑證(如用戶名和密碼)並且能夠獲取 JWT。 ### 步驟 1:生成 JWT 首先,你需要獲取 JWT,通常是通過登錄端點獲取。這個端點驗證用戶名和密碼並返回一個 JWT。 public async TaskGetJwtTokenAsync(string username, string password) { var client = new HttpClient(); var loginUrl = "https://yourapi.com/api/auth/login"; var loginData = new { Username = username, Password = password }; var content = new StringContent(JsonSerializer.Serialize(loginData), Encoding.UTF8, "application/json"); var response = await client.PostAsync(loginUrl, content); response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync(); var jwt = JsonSerializer.Deserialize (responseString); return jwt.Token; } public class JwtResponse { public string Token { get; set; } } ### 步驟 2:配置 HttpClient 並附加 JWT 在獲取 JWT 之後,你可以在後續的請求中附加此 JWT 進行授權。 public async Task GetProtectedResourceAsync(string token) { var client = new HttpClient(); var requestUrl = "https://yourapi.com/api/protectedresource"; // 附加 Bearer Token 到請求頭 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var response = await client.GetAsync(requestUrl); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } ### 完整示例 以下是完整的代碼,包含了從獲取 JWT 到使用 JWT 訪問受保護資源的流程: using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Text.Json; using System.Threading.Tasks; public class Program { public static async Task Main(string[] args) { string username = "yourusername"; string password = "yourpassword"; string token = await GetJwtTokenAsync(username, password); string protectedResource = await GetProtectedResourceAsync(token); Console.WriteLine(protectedResource); } public static async Task GetJwtTokenAsync(string username, string password) { var client = new HttpClient(); var loginUrl = "https://yourapi.com/api/auth/login"; var loginData = new { Username = username, Password = password }; var content = new StringContent(JsonSerializer.Serialize(loginData), Encoding.UTF8, "application/json"); var response = await client.PostAsync(loginUrl, content); response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync(); var jwt = JsonSerializer.Deserialize (responseString); return jwt.Token; } public static async Task GetProtectedResourceAsync(string token) { var client = new HttpClient(); var requestUrl = "https://yourapi.com/api/protectedresource"; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var response = await client.GetAsync(requestUrl); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } public class JwtResponse { public string Token { get; set; } } ### 注意事項 1. **安全性**:確保密碼和其他敏感信息的安全傳輸和存儲。 2. **錯誤處理**:添加適當的錯誤處理邏輯,例如處理登錄失敗或令牌過期的情況。 3. **Token 更新**:考慮在令牌過期後刷新令牌。 這樣,你就可以使用 `HttpClient` 訪問需要授權的 RESTful API。這種方式適用於各種需要身份驗證的 HTTP 請求場景。
▼