using System.Net.Http.Json; using Volo.Abp.Settings; namespace Sozsoft.Sender; /// /// Sağlayıcı istemcilerinin ortak iskeleti: ile verilen /// , ayarlardan okunan uç nokta ve JSON gövde ile POST. Sağlayıcıya özgü /// olan yalnızca istek gövdesi, başlıklar ve cevap tipidir. /// public abstract class SettingHttpClientBase : IDisposable { protected HttpClient HttpClient { get; } protected ISettingProvider SettingProvider { get; } protected SettingHttpClientBase(HttpClient httpClient, ISettingProvider settingProvider) { HttpClient = httpClient; SettingProvider = settingProvider; } protected Task GetSettingAsync(string name) => SettingProvider.GetOrNullAsync(name); /// /// Gövdeyi JSON olarak gönderir ve cevabı olarak okur. /// kapalıyken 4xx gövdesi de okunur: bazı API'ler hatayı /// durum koduyla değil gövdedeki açıklamayla verir. /// protected async Task PostJsonAsync( string url, object body, Action? configureRequest = null, bool ensureSuccess = false) { using var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = JsonContent.Create(body) }; configureRequest?.Invoke(request); using var response = await HttpClient.SendAsync(request); if (ensureSuccess) { response.EnsureSuccessStatusCode(); } return await response.Content.ReadFromJsonAsync(); } public void Dispose() { HttpClient.Dispose(); GC.SuppressFinalize(this); } }