using System.Net.Http.Headers; using System.Net.Mime; using Migration.Settings; using Microsoft.Extensions.Options; namespace Migration.Services; public class DataverseProvider : IDataverseProvider { public const string HTTP_CLIENT = "FeedDataverseBQ"; private static readonly ProductInfoHeaderValue USER_AGENT = ProductInfoHeaderValue.Parse("FeedDataverseBQ"); private static readonly MediaTypeWithQualityHeaderValue JSON_MEDIA_TYPE = new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json); public Uri Url { get; init; } public string Token { get; init; } public DataverseProvider(IOptions mainSettingsOptions, IHttpClientFactory httpClientFactory) { var DataverseSettings = mainSettingsOptions.Value; Url = new Uri(DataverseSettings.Url); Token = DataverseSettings.Token; } public static void Setup(IServiceProvider serviceProvider, HttpClient httpClient) { var dataverseConnectionsProvider = serviceProvider.GetRequiredService(); httpClient.BaseAddress = dataverseConnectionsProvider.Url; httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", dataverseConnectionsProvider.Token); httpClient.DefaultRequestHeaders.UserAgent.Add(USER_AGENT); httpClient.DefaultRequestHeaders.Accept.Add(JSON_MEDIA_TYPE); } } public class DataverseDelegatingHandler : DelegatingHandler { protected override HttpResponseMessage Send(HttpRequestMessage request, CancellationToken cancellationToken) { return SendAsync(request, cancellationToken).GetAwaiter().GetResult(); } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { return await base.SendAsync(request, cancellationToken); } }