การใช้งาน API ด้วย C# (.NET 9)

ตัวอย่างด้านล่างแสดงการใช้งาน API ด้วย C# ใน 3 รูปแบบ:

ใช้ปุ่มด้านล่างเพื่อสลับดูโค้ดตัวอย่าง

Environment:

1. ขอรับ Token (refresh-token และ access-token)

เริ่มด้วยการขอรับ refresh-token และ access-token โดยใช้ username, password

C#: ตัวอย่าง C# Console app ใช้ HttpClient เพื่อขอ token จาก API โดยตรง

ASP.NET (Controller): ตัวอย่าง Controller ในโปรเจกต์ webapi ที่รับ username/password และเรียก API เพื่อขอ token

ASP.NET (Minimal): ตัวอย่าง minimal API (dotnet new web) ที่มี endpoint สำหรับขอ token

Program.cs (C#)

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program
{
    static async Task Main()
    {
        string username = "your_username";
        string password = "your_password";

        using var client = new HttpClient();
        var data = new Dictionary
        {
            ["username"] = username,
            ["password"] = password
        };

        var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/", data);
        var tokens = await response.Content.ReadFromJsonAsync>();

        Console.WriteLine("Refresh Token: " + tokens["refresh"]);
        Console.WriteLine("Access Token: " + tokens["access"]);
    }
}
TokenController.cs (ASP.NET Controller)

using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

[ApiController]
[Route("[controller]")]
public class TokenController : ControllerBase
{
    [HttpPost("get-tokens")]
    public async Task GetTokens([FromQuery] string username = "your_username", [FromQuery] string password = "your_password")
    {
        using var client = new HttpClient();
        var data = new Dictionary
        {
            ["username"] = username,
            ["password"] = password
        };

        var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/", data);
        var tokens = await response.Content.ReadFromJsonAsync>();

        return Ok(tokens);
    }
}
Program.cs (ASP.NET Minimal)

using System.Net.Http.Json;
using System.Collections.Generic;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/get-tokens", async (string username = "your_username", string password = "your_password") =>
{
    using var client = new HttpClient();
    var data = new Dictionary
    {
        ["username"] = username,
        ["password"] = password
    };

    var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/", data);
    var tokens = await response.Content.ReadFromJsonAsync>();
    return Results.Ok(tokens);
});

app.Run();

2. ทดสอบรับ Tokens โดยตรง

รันโค้ดหรือเรียก endpoint ข้างต้นเพื่อรับ token


3. ขอ Access-Token ใหม่เมื่อ Access-Token หมดอายุ

C#: ด้านล่างเป็นตัวอย่างการใช้ refresh-token เพื่อขอ access-token ใหม่

ASP.NET (Controller): เพิ่ม Endpoint สำหรับ refresh-token ใน Controller เช่นเดียวกับ get-tokens

ASP.NET (Minimal): เพิ่ม MapPost สำหรับ refresh-token request เช่นเดียวกับ get-tokens

RefreshAccess.cs (C#)

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

class RefreshAccess
{
    static async Task Main()
    {
        string refreshToken = "your_refresh_token_here";

        using var client = new HttpClient();
        var data = new Dictionary
        {
            ["refresh"] = refreshToken
        };

        var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/refresh/", data);
        var json = await response.Content.ReadFromJsonAsync>();

        Console.WriteLine("New Access Token: " + json["access"]);
    }
}
RefreshController.cs (ASP.NET Controller)

using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

[ApiController]
[Route("[controller]")]
public class RefreshController : ControllerBase
{
    [HttpPost("refresh-token")]
    public async Task RefreshToken([FromQuery] string refresh = "your_refresh_token_here")
    {
        using var client = new HttpClient();
        var data = new Dictionary
        {
            ["refresh"] = refresh
        };

        var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/refresh/", data);
        var json = await response.Content.ReadFromJsonAsync>();

        return Ok(json);
    }
}
Program.cs (ASP.NET Minimal Refresh)

using System.Net.Http.Json;
using System.Collections.Generic;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/refresh-token", async (string refresh = "your_refresh_token_here") =>
{
    using var client = new HttpClient();
    var data = new Dictionary
    {
        ["refresh"] = refresh
    };

    var response = await client.PostAsJsonAsync("https://hcode.moph.go.th/api/token/refresh/", data);
    var json = await response.Content.ReadFromJsonAsync>();
    return Results.Ok(json);
});

app.Run();

สรุป: