FeedDataverseBQ/Migration/Services/Implementation/DataverseProvider.cs

40 lines
1.7 KiB
C#
Raw Permalink Normal View History

2025-03-24 09:45:46 -04:00
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<MainSettings> 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<IDataverseProvider>();
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<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return await base.SendAsync(request, cancellationToken);
}
}