public ApiEndpoint(ApiEndpointConfiguration configuration, IApiVersionProvider apiVersionProvider) { _apiVersionProvider = apiVersionProvider; Configuration = configuration; _clientHandler = new HttpClientHandler(); _client = new HttpClient(_clientHandler); }
public Uri FromPath(string path, ApiEndpointConfiguration endpointConfiguration, IApiVersionProvider apiVersionProvider) { var apiVersion = apiVersionProvider.GetVersion(); var apiVersionPath = string.IsNullOrWhiteSpace(apiVersion) ? "" : $"/v{apiVersion}"; path = path[0] == '/' ? path : $"/{path}"; var separatedPath = path.Split(new[] { '?' }, StringSplitOptions.RemoveEmptyEntries); var pathWithoutQuery = separatedPath[0]; var query = separatedPath.Length == 2 ? separatedPath[1] : ""; var uriBuilder = new UriBuilder(_authConfig.SiteUrl) { Scheme = _authConfig.UseHttps ? "https" : "http", Path = $"{apiVersionPath}{pathWithoutQuery}", Query = query }; uriBuilder.Host = $"{endpointConfiguration.EndpointAlias}.{uriBuilder.Host}"; return(uriBuilder.Uri); }
public AuthService(HttpClient client, ApiEndpointConfiguration endpointConfiguration, ILogger <AuthService> logger) : base(client) { _endpointConfiguration = endpointConfiguration; Client.BaseAddress = new Uri(_endpointConfiguration.IdentityOrigin); _logger = logger; }
public ApiEndPointConfigurationTests() { // Arrange _configuration = Substitute.For <IConfiguration>(); _sut = new ApiEndpointConfiguration(Constants.ProxyPrefix.ApiResourceProxy, _configuration); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:hostAddress"].Returns(Hostaddress); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:basePath"].Returns(BasePath); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:token"].Returns(Token); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:timeoutSeconds"].Returns(TimeoutSeconds); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:circuitBreaker:exceptionAllowedBeforeBreaking"].Returns(CircuitBreakerExceptionAllowedBeforeBreaking); _configuration[$"{Constants.ProxyPrefix.ApiResourceProxy}:circuitBreaker:durationOfBreakInMinutes"].Returns(CircuitBreakerDurationOfBreakInMinutes); }
public Uri FromPath(string path, ApiEndpointConfiguration endpointConfiguration, IApiVersionProvider apiVersionProvider) { if (string.IsNullOrWhiteSpace(endpointConfiguration.EndpointAddress)) { throw new ArgumentNullException(endpointConfiguration.EndpointAddress); } var currentPath = new Uri(endpointConfiguration.EndpointAddress).PathAndQuery ?? ""; var newPath = $"{currentPath}/{path}"; return(new Uri(new Uri(endpointConfiguration.EndpointAddress), newPath)); }
public void TestCustomApiUrlWithConcreteApiVersion() { const string expected = "https://localhost:8000/api/path/123"; var config = new ApiEndpointConfiguration { EndpointAddress = "https://localhost:8000/api" }; var actual = _uriBuilder.FromPath("path/123", config, new SelectedApiVersionProvider("1.0")).ToString(); Assert.Equal(expected, actual); }
public static IHttpClientBuilder AddHttpClientWithCircuitBreaker <TInterface, TImplementation>(this IServiceCollection services, string apiPrefix, IConfiguration configuration) where TInterface : class where TImplementation : class, TInterface { var apiConfiguration = new ApiEndpointConfiguration(apiPrefix, configuration); return(services.AddHttpClient <TInterface, TImplementation>(client => { client.BaseAddress = apiConfiguration.BaseAddress; client.DefaultRequestHeaders.Add("Accept", "application/json"); client.Timeout = apiConfiguration.Timeout; }) .AddTransientHttpErrorPolicy(builder => { return builder.CircuitBreakerAsync(apiConfiguration.ExceptionAllowedBeforeBreaking, TimeSpan.FromMinutes(apiConfiguration.DurationOfBreakInMinutes)); })); }
public void BuildsCorrectUriWithParams() { const string expected = "https://localhost:8000/api/path/123?var=asd&var1=qwe"; var config = new ApiEndpointConfiguration { EndpointAddress = "https://localhost:8000/api" }; var actual = _uriBuilder.FromPath( "path/123?var=asd&var1=qwe", config, new SelectedApiVersionProvider("1.0") ).ToString(); Assert.Equal(expected, actual); }
public ApiEndpoint(ApiEndpointConfiguration configuration) : this(configuration, new AnyApiVersionProvider()) { }