FeedDataverseBQ/Migration/Services/Implementation/DataverseProvider.cs

47 lines
1.8 KiB
C#

using System.Net.Http.Headers;
using System.Net.Mime;
using Migration.Settings;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
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);
}
}