示例#1
0
        /// <summary>
        /// Logs all response headers added in EncompassHttpResponseHeaderLoggerOptions from HttpClientOptions
        /// </summary>
        public EncompassHttpClientBuilder AddEncompassHttpResponseHeaderLoggingHandler()
        {
            var headers = _options.EncompassHttpResponseHeaderLoggerOptions;

            if (headers == null)
            {
                headers = new EncompassHttpResponseHeaderLoggerOptions();
            }
            headers.AddRange("X-Concurrency-Limit-Limit", "X-Concurrency-Limit-Remaining", "X-Rate-Limit-Limit", "X-Rate-Limit-Remaining", "X-Rate-Limit-Reset");
            if (headers.Count() > 0)
            {
                _builder.AddHttpMessageHandler(sp => new EncompassResponseHeadersLoggingHandler <EncompassHttpClientBuilder>(
                                                   sp.GetService <ILogger <EncompassHttpClientBuilder> >(),
                                                   headers));
            }
            return(this);
        }
示例#2
0
        private void AddClientWithFairwayTokenHandlerandInterceptor(IFunctionsHostBuilder builder)
        {
            var fairwayTokenClientOptions = ConfigHelper.GetFairwayTokenClientOptions();
            var encompassClientOptions    = ConfigHelper.GetEncompassClientOptions();

            var clientParameters = new ClientParameters
            {
                ApiClientId     = fairwayTokenClientOptions.ClientId,
                ApiClientSecret = fairwayTokenClientOptions.ClientSecret
            };

            clientParameters.CustomFieldsCacheInitialization = EncompassApi.CacheInitialization.Never;

            var headers = new EncompassHttpResponseHeaderLoggerOptions();

            headers.AddRange("X-Concurrency-Limit-Limit", "X-Concurrency-Limit-Remaining", "X-Rate-Limit-Limit", "X-Rate-Limit-Remaining", "X-Rate-Limit-Reset");

            var fairwayIOptions = Options.Create(fairwayTokenClientOptions);

            builder.Services.AddSingleton(clientParameters);
            builder.Services.AddSingleton(fairwayIOptions);

            builder.Services.AddFairwayTokenHandler(fairwayTokenClientOptions)
            .AddPolicyHandler(HttpPolicyExtensions.HandleTransientHttpError().RetryAsync(fairwayTokenClientOptions.RetryCount))
            .AddPolicyHandler(Policy.TimeoutAsync <HttpResponseMessage>(fairwayTokenClientOptions.TimeoutInSeconds));

            builder.Services.AddEncompassHttpClient(options =>
            {
                options.CompressionOptions = new HttpClientCompressionHandlerOptions()
                {
                    DecompressionMethods    = new DecompressionMethods[] { DecompressionMethods.GZip },
                    EnableAutoDecompression = true
                };
                options.ClientParameters = clientParameters;
                options.EncompassHttpResponseHeaderLoggerOptions = headers;
                options.EncompassClientOptions = encompassClientOptions;
            },
                                                    config => config.BaseAddress = new Uri(encompassClientOptions.BaseUrl))
            .AddEncompassTokenMessageHandler()
            .AddEncompassHttpResponseHeaderLoggingHandler()
            .AddEncompassMessageHandler(sp => new AuthHeaderInterceptorHandler(sp.GetService <ILogger <AuthHeaderInterceptorHandler> >()))
            .AddEncompassRetryPolicyHandler()
            .AddEncompassTimeoutPolicyHandler()
            .Build(builder.Services);
        }