哈囉大家好!今天要來試試看用Minimal API格式發送GET request!
這次使用的是免費的public API, 這個API會回傳隨機的鴨子圖片URL, 例如:
{"message":"Powered by random-d.uk","url":"https://random-d.uk/api/508.jpg"}
API的endpoint都是https://random-d.uk/api/random
那就馬上開始吧!
首先先創建一個新的Client.cs檔,並建立一個DuckApiClient class來專門處理呼叫API的邏輯:
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
public class DuckApiClient
{
public class DuckResponse
{
public string? message { get; set; }
public string? url { get; set; }
}
// 取得完整 JSON 字串
public static async Task<string?> GetRandomDuckAsync()
{
using (HttpClient client = new HttpClient())
{
try
{
var response = await client.GetAsync("https://random-d.uk/api/random");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
catch (HttpRequestException e)
{
return JsonSerializer.Serialize(new { error = e.Message });
}
}
}
// 只取 URL 欄位
public static async Task<string?> GetRandomDuckUrlAsync()
{
using (HttpClient client = new HttpClient())
{
try
{
var response = await client.GetAsync("https://random-d.uk/api/random");
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
var duck = JsonSerializer.Deserialize<DuckResponse>(json);
return duck?.url;
}
catch (HttpRequestException)
{
return null;
}
}
}
}
這裡用到了 HttpClient 來發送 GET request,並透過 JsonSerializer.Deserialize() 把 JSON 字串轉換成物件。
Task<string?> 代表這是一個非同步方法,最後會回傳 string 或 null。
預計回傳的是json格式的字串,Task<string?> 表示這個方法是非同步的,並且最後會回傳一個 string 或 null。
接著,在 Program.cs 新增三個不同的 endpoint,分別示範三種回傳方式:
// 直接回傳完整 JSON
app.MapGet("/duck/json", async () =>
{
var result = await DuckApiClient.GetRandomDuckAsync();
return Results.Content(result ?? "No response", "application/json");
});
// 只回傳圖片 URL
app.MapGet("/duck/url", async () =>
{
var url = await DuckApiClient.GetRandomDuckUrlAsync();
return Results.Text(url ?? "No response");
});
// 直接重導向到鴨子圖片
app.MapGet("/duck", async () =>
{
var url = await DuckApiClient.GetRandomDuckUrlAsync();
return url is not null ? Results.Redirect(url) : Results.Problem("No duck found");
});
啟動專案後,在瀏覽器中試試看訪問各個endpoint,就可以看到隨機回傳的隨機照片內容:
http://localhost:5232/duck/json → 顯示完整 JSON
http://localhost:5232/duck/url → 只顯示圖片 URL
http://localhost:5232/duck → 直接跳轉到隨機鴨子圖片
明天要來試試看用Controller的方式來發送請求,看看兩種方式的差異~