Ejemplo n.º 1
0
        private static HttpClientOptionsProvider CreateHttpSenderOptions()
        {
            var provider = new HttpClientOptionsProvider();

            provider.SetBaseAddress(BaseAddress);

            provider.ConfigureSenderOptions(opt =>
            {
                opt.RequestTimeout           = TimeSpan.FromSeconds(10);
                opt.ValidateErrorsInResponse = true;
                opt.XmlParseSettings         = new XmlParseSettings
                {
                    Serialize = new XmlSerializeSettings()
                    {
                        RemoveNilElements = true
                    },

                    Deserialize = new XmlSerializeSettings()
                    {
                        RemoveEmptyElements = true,
                        RemoveNilElements   = true
                    }
                };
            });

            return(provider);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// register new configured http client factory to host services
        /// </summary>
        /// <param name="services">host services list</param>
        /// <param name="cfgAction">HttpClientOptionsProvider action</param>
        /// <typeparam name="TClient">Sender class type</typeparam>
        /// <typeparam name="TImplementation">Sender implementation interface</typeparam>
        /// <exception cref="ArgumentNullException">wrong configuration params</exception>
        public static IServiceCollection AddConfiguredHttpClient <TClient, TImplementation>(this IServiceCollection services, Action <HttpClientOptionsProvider> cfgAction)
            where TClient : class
            where TImplementation : HttpSenderBase, TClient
        {
            if (cfgAction == null)
            {
                throw new ArgumentNullException();
            }

            var cfg = new HttpClientOptionsProvider();

            cfgAction.Invoke(cfg);

            if (cfg.BaseAddress == null)
            {
                throw new ArgumentNullException(nameof(cfg.BaseAddress));
            }

            services.TryAddSingleton <IResponseFactory, ResponseFactory>();
            services.PutHttpSenderOptionsInPool <TImplementation>(cfg.SenderOptions);

            return(services
                   .AddHttpClient <TClient, TImplementation>()
                   .ConfigureHttpClient(
                       (sp, options) =>
            {
                options.BaseAddress = cfg.BaseAddress;
                options.Timeout = Timeout.InfiniteTimeSpan;         //override by HttpClientOptionsProvider
                cfg.AcceptHeaders.ForEach(h => options.DefaultRequestHeaders.Accept.Add(h));
                cfg.RequestHeaders.CopyTo(options.DefaultRequestHeaders);
            })
                   .ConfigurePrimaryHttpMessageHandler(() =>
            {
                var handler = new HttpClientHandler
                {
                    UseProxy = cfg.HasProxy,
                    Credentials = cfg.Credentials,
                    AutomaticDecompression = cfg.ResponseAutoDecompressionType
                };

                if (!cfg.HasServerCertificateValidation)
                {
                    handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
                }

                return handler;
            })
                   .Services);
        }
Ejemplo n.º 3
0
        public HttpXmlUnitTest()
        {
            if (string.IsNullOrEmpty(BaseAddress))
            {
                throw new ArgumentNullException($"Empty test params");
            }

            _optionsProvider = CreateHttpSenderOptions();
            _httpClient      = CreateHttpClient(_optionsProvider.BaseAddress);
            _nullRepoLogger  = new NullLoggerFactory().CreateLogger <HttpSenderXml>();
            _responseFactory = new ResponseFactory();
            _optionsPool     = HttpSenderOptionsPool.CreateInstance <ConcreteHttpSenderXml>(_optionsProvider.SenderOptions);

            _xmlSender = new ConcreteHttpSenderXml(_httpClient, _optionsPool, _responseFactory, _nullRepoLogger);
        }