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); }
/// <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); }
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); }