コード例 #1
0
 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);
        }
コード例 #3
0
ファイル: AuthService.cs プロジェクト: Minh8181-blz/Test-Shop
        public AuthService(HttpClient client, ApiEndpointConfiguration endpointConfiguration, ILogger <AuthService> logger) : base(client)
        {
            _endpointConfiguration = endpointConfiguration;

            Client.BaseAddress = new Uri(_endpointConfiguration.IdentityOrigin);

            _logger = logger;
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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));
            }));
        }
コード例 #8
0
        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);
        }
コード例 #9
0
 public ApiEndpoint(ApiEndpointConfiguration configuration)
     : this(configuration, new AnyApiVersionProvider())
 {
 }