.NETCore HttpClient DelegatingHandler for OVH API Credentials.
This delegating handler decouples the proprietary authentication mechanism from a given api implementation. It allows to use any HttpClient/IHttpClientFactory rest client to consume OVH API. Doing so, unit tests are more easy to do than with the official implementation.
This project does not aim at providing a strongly-typed rest client. OVH API changes over the time, is not the same on all regions and the specification of the api is hidden in a yet another proprietary api specification format which make difficult to maitain an up to date package.
You only need to add the delegating handler by calling AddOVHCredentials.
To get your credentials, follow the user guide.
var provider = new ServiceCollection()
.AddHttpClient("ovh", c => c.BaseAddress = new Uri("https://eu.api.ovh.com/1.0"))
.AddOVHCredentials(options =>
{
// you are free to use whatever you are used to to configure the handler
options.ApplicationKey = "";
options.ApplicationSecret = "";
options.ConsumerKey = "";
}).Services.BuildServiceProvider();
var httpClientFactory = provider.GetRequiredService<IHttpClientFactory>();
var httpClient = httpClientFactory.CreateClient("ovh");
await httpClient.GetAsync("/me");This sample uses Refit library.
class Program
{
static async Task Main(string[] args)
{
var provider = new ServiceCollection()
.AddRefitClient<IMe>()
.ConfigureHttpClient(c => c.BaseAddress = new Uri("https://eu.api.ovh.com/1.0"))
// as credentials are time based, polly (if used) should be placed before credentials
.AddTransientHttpErrorPolicy(policyBuilder => policyBuilder.RetryAsync(2))
// configure the client with ovh credentials
.AddOVHCredentials(options =>
{
// you are free to use whatever you are used to to configure the handler
options.ApplicationKey = "";
options.ApplicationSecret = "";
options.ConsumerKey = "";
}).Services.BuildServiceProvider();
var client = provider.GetRequiredService<IMe>();
var me = await client.Me();
Console.WriteLine($"Welcome, {me.firstname}");
}
public interface IMe
{
[Get("/me")]
public Task<PartialMe> Me();
}
public class PartialMe
{
public string firstname { get; set; }
public string name { get; set; }
}
}The ApiTester sample application shows how to retrieve the consumer key, if needed.