iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

哈囉大家好!今天要來試試看用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
那就馬上開始吧!

1. 建立API Client類別

首先先創建一個新的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。

2. 在Program.cs檔中設定Minimal API路由

接著,在 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");
});

3. 瀏覽器測試

啟動專案後,在瀏覽器中試試看訪問各個endpoint,就可以看到隨機回傳的隨機照片內容:
http://localhost:5232/duck/json → 顯示完整 JSON
http://localhost:5232/duck/url → 只顯示圖片 URL
http://localhost:5232/duck → 直接跳轉到隨機鴨子圖片

學習重點總結

  1. 如何用HttpClient發送GET request
  2. 如何處理API回傳的JSON
  3. 建立多個endpoint,回傳不同型態的資料

明天要來試試看用Controller的方式來發送請求,看看兩種方式的差異~


上一篇
DAY 5 - 小試身手!簡單練習撰寫API格式
下一篇
DAY 7 - 用Controller 發送GET request
系列文
30天的旅程!從學習C#到開發小專案7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言