C# ve .NET ile döviz kurları

IHttpClientFactory, decimal, iptal, sınırlı zaman aşımı ve kaynak bilgisini koruyan yanıt işlemeyle tipli bir .NET FX istemcisi kurun.

exchangerate.devJul 17, 20266 dk okuma

Tipli HttpClient kaydedin, anahtarı yapılandırmadan alın ve kurları decimal olarak çözümleyin. İptali çağrı boyunca iletin.

Önemli noktalar
IHttpClientFactory kullanın.
Kurları decimal olarak okuyun.
CancellationToken ve zaman aşımı kullanın.
Çözümlemeden önce EnsureSuccessStatusCode() çağırın.

Tipli HttpClient kaydedin

Kayıt temel URL, bearer token ve zaman aşımını yönetir. İstemci yanıt sözleşmesini ve iptali korur.

csharp · Program.cs and FxClient.cs
// Program.cs
using System.Net.Http.Headers;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHttpClient<FxClient>(client =>
{
    var key = builder.Configuration["EXCHANGERATE_API_KEY"]
        ?? throw new InvalidOperationException("EXCHANGERATE_API_KEY is missing");

    client.BaseAddress = new Uri("https://api.exchangerate.dev/v1/");
    client.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Bearer", key);
    client.Timeout = TimeSpan.FromSeconds(5);
});

// FxClient.cs
using System.Net.Http.Json;
using System.Text.Json.Serialization;

public sealed record LatestRates(
    string Base,
    string Source,
    [property: JsonPropertyName("market_session")] string MarketSession,
    [property: JsonPropertyName("data_updated_at")] DateTimeOffset DataUpdatedAt,
    Dictionary<string, decimal> Rates
);

public sealed class FxClient(HttpClient http)
{
    public async Task<LatestRates> GetLatestAsync(
        string baseCurrency,
        CancellationToken cancellationToken)
    {
        using var response = await http.GetAsync(
            $"latest/{baseCurrency}?symbols=EUR,GBP",
            cancellationToken);

        response.EnsureSuccessStatusCode();

        return await response.Content.ReadFromJsonAsync<LatestRates>(
            cancellationToken: cancellationToken)
            ?? throw new InvalidOperationException("Empty FX response");
    }
}

İptali istekten iletin

csharp · endpoint usage
var app = builder.Build();

app.MapGet("/fx", async (
    FxClient fx,
    CancellationToken cancellationToken) =>
{
    var rates = await fx.GetLatestAsync("USD", cancellationToken);

    return Results.Ok(new {
        eur = rates.Rates["EUR"],
        rates.Source,
        rates.MarketSession,
        rates.DataUpdatedAt,
    });
});

app.Run();

Yalnızca başarılı gözlemleri önbelleğe alın

Yalnızca Rates["EUR"] değil, Source, MarketSession ve DataUpdatedAt içeren tam gözlemi saklayın.

Yinelemeyi dar tutun
Kısa ağ hatalarını ve seçili 5xx yanıtlarını yineleyin. 401 veya 429 için yineleme fırtınası oluşturmayın.
  • Tek istemci kaydı kullanın.
  • decimal kullanın.
  • İptali iletin.
  • Hataları çözümlemeden önce reddedin.
ER
exchangerate.dev
FX verileriyle çalışan geliştiriciler için entegrasyon rehberleri.

Okumaya devam edin