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);
}
}