Tutorial/C# ve .NET

C# ve .NET ile döviz kurları

IHttpClientFactory, decimal, iptal ve sınırlı zaman aşımıyla tipli bir .NET FX istemcisi kurun.

MMexchangerate.dev·Jul 17, 2026·6 dk okuma

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

Key points
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 süreyi yönetir. İstemci yanıt sözleşmesini ve iptali korur.

csharp · Program.cs and FxClient.cscopy
// 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 usagecopy
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.
MM
exchangerate.dev
FX verileriyle çalışan geliştiriciler için entegrasyon rehberleri.

Keep reading

GuideTek çağrıda geçmiş FX zaman serisiRead Referencesource ve market_session alanlarını okumaRead GuideGösterge ve uygulanabilir FX kurlarıRead