/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/csharp/csharp-505-45-002/main.cs
38 строк
2 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
public abstract class BaseIntegrationService { protected readonly IHttpClientFactory _httpClientFactory; protected readonly ILogger _logger; public BaseIntegrationService(IHttpClientFactory httpClientFactory, ILogger logger) { _httpClientFactory = httpClientFactory; _logger = logger; } public async Task<TResponse> ExecuteAsync<TRequest, TResponse>( TRequest request, CancellationToken ct = default) { // Шаг 1: Получить/обновить токен var token = await AcquireTokenAsync(ct); // Шаг 2: Создать клиент var client = _httpClientFactory.CreateClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); // Шаг 3: Подготовить запрос (абстрактный метод) var httpRequest = PrepareRequest(request); // Шаг 4: Отправить (можно обернуть в Polly retry policy) var response = await client.SendAsync(httpRequest, ct); // Шаг 5: Обработать ответ — делегируем специфическую логику return await HandleResponseAsync<TResponse>(response, ct); } // Защищённые абстрактные/виртуальные методы для кастомизации protected abstract Task<string> AcquireTokenAsync(CancellationToken ct); protected abstract HttpRequestMessage PrepareRequest<T>(T request); protected abstract Task<TResponse> HandleResponseAsync<TResponse>( HttpResponseMessage response, CancellationToken ct); }