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.
// 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
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.
