Async GitHub API client
C#
using System.Net.Http.Json;
using System.Text.Json.Serialization;
public sealed record Repo(
string Name,
[property: JsonPropertyName("html_url")] string HtmlUrl);
public static class GitHubClient
{
private static readonly HttpClient Http = new()
{
BaseAddress = new Uri("https://api.github.com/"),
Timeout = TimeSpan.FromSeconds(10)
};
public static async Task<IReadOnlyList<Repo>> GetReposAsync(
string user, CancellationToken ct = default)
{
using var request = new HttpRequestMessage(
HttpMethod.Get, $"users/{Uri.EscapeDataString(user)}/repos?per_page=100");
request.Headers.UserAgent.ParseAdd("bits-example");
using var response = await Http.SendAsync(request, ct);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<List<Repo>>(ct) ?? [];
}
}