/// <summary>
        /// Adds support for ZipArchive
        /// <para>Can create a deserializer for application/zip</para>
        /// </summary>
        /// <param name="builder">The extended ISolidHttpBuilder</param>
        /// <param name="mode">The zip archive mode</param>
        /// <param name="additionalMimeTypes">Additional zip mime types</param>
        /// <returns>ISolidHttpBuilder</returns>
        public static ISolidHttpBuilder AddZip(this ISolidHttpBuilder builder, ZipArchiveMode mode, params string[] additionalMimeTypes)
        {
            var provider = new ZipArchiveSerializerSettingsProvider(mode);

            builder.Services.AddSingleton <IZipSerializerSettingsProvider>(provider);
            builder.AddDeserializer <ZipArchiveResponseDeserializerFactory>("application/zip");
            return(builder);
        }
        public static ISolidHttpBuilder AddSharpCompress(this ISolidHttpBuilder builder, SharpCompressOptions options = default(SharpCompressOptions))
        {
            options = options ?? new SharpCompressOptions();
            if (options.MimeTypes.Count < 1)
            {
                throw new ArgumentException("You have to have at least one mimetype specified");
            }
            var provider = new SharpCompressSerializerSettingsProvider(options);

            builder.Services.AddSingleton <ISharpCompressSerializerSettingsProvider>(provider);
            var mimeTypeTail = options.MimeTypes.GetRange(1, options.MimeTypes.Count - 1);

            builder.Services.AddSolidHttpDeserializer <SharpCompressResponseDeserializerFactory>(options.MimeTypes[0], mimeTypeTail.ToArray());
            return(builder);
        }
Esempio n. 3
0
 /// <summary>
 /// Adds logging for request and response
 /// </summary>
 /// <typeparam name="TLogger">The IHttpLogger implementation that performs the logging</typeparam>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder AddLogging <TLogger>(this ISolidHttpBuilder builder) where TLogger : class, IHttpLogger
 {
     builder.Services.AddLogging();
     builder.Services.TryAddSingleton <IHttpLogger, TLogger>();
     builder.OnRequest(async(provider, request) =>
     {
         var logger = provider.GetService <IHttpLogger>();
         await logger.LogRequestAsync(request);
     });
     builder.OnResponse(async(provider, response) =>
     {
         var logger = provider.GetService <IHttpLogger>();
         await logger.LogResponseAsync(response);
     });
     return(builder);
 }
        /// <summary>
        /// Adds xml support using supplied settings
        /// <para>Can create a deserializer for application/xml and text/xml</para>
        /// </summary>
        /// <param name="builder">The setup</param>
        /// <param name="settings">Supplied XmlSerializerSettings</param>
        /// <returns>ISolidHttpSetup</returns>
        public static ISolidHttpBuilder AddXml(this ISolidHttpBuilder builder, DataContractSerializerSettings settings)
        {
            var provider = new XmlSerializerSettingsProvider(settings);

            builder.Services.AddSingleton <IXmlSerializerSettingsProvider>(provider);
            builder.Services.AddSolidHttpDeserializer <XmlResponseDeserializerFactory>("application/xml", "text/xml");

            return(builder
                   .AddSolidHttpOptions(options =>
            {
                options.Events.OnRequestCreated += (sender, args) =>
                {
                    var p = args.Services.GetRequiredService <IXmlSerializerSettingsProvider>();
                    args.Request.BaseRequest.Properties.Add("XmlSerializerSettings", p.GetXmlSerializerSettings());
                };
            }));
        }
        public static ISolidHttpBuilder AddExceptionMappings(this ISolidHttpBuilder builder, ExceptionMappingOptions options = default(ExceptionMappingOptions))
        {
            options = options ?? new ExceptionMappingOptions();

            /*builder.Services.AddSingleton<SolidHttpExceptionMapper<SolidHttpRequestException>>(new SolidHttpDefaultExceptionMapper());
             * builder.Services.AddSingleton<SolidHttpExceptionMapper<SolidHttpRequestModelException>>(new SolidHttpModelExceptionMapper());*/
            builder.Services.AddSingleton <IExceptionMapper>(new SolidHttpDefaultExceptionMapper());
            builder.Services.AddSingleton <IExceptionMapper>(new SolidHttpModelExceptionMapper());
            var provider = new ExceptionMappingSettingsProvider(options);

            builder.Services.AddSingleton <IExceptionMappingSettingsProvider>(provider);
            foreach (var mapper in options.Mappers)
            {
                builder.Services.AddSingleton(mapper);
            }
            return(builder);
        }
Esempio n. 6
0
 /// <summary>
 /// Adds a deserializer factory used to deserialize the specified mime types
 /// </summary>
 /// <typeparam name="TFactory">The deserializer factory type</typeparam>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="mimeType">The mime type to deserialize</param>
 /// <param name="more">More mime types</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder AddDeserializer <TFactory>(this ISolidHttpBuilder builder, string mimeType, params string[] more)
     where TFactory : class, IResponseDeserializerFactory
 {
     builder.Core.AddDeserializer <TFactory>(mimeType, more);
     return(builder);
 }
 /// <summary>
 /// Adds support for ZipArchive
 /// <para>Can create a deserializer for application/zip</para>
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="additionalMimeTypes">Additional zip mime types</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder AddZip(this ISolidHttpBuilder builder, params string[] additionalMimeTypes) =>
 builder.AddZip(ZipArchiveMode.Read, additionalMimeTypes);
Esempio n. 8
0
 /// <summary>
 /// Add a global handler to be run when every Solid.Http client object is created.
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="action">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnClientCreated(this ISolidHttpBuilder builder, Action <ISolidHttpClient> action)
 {
     builder.Core.OnClientCreated(action);
     return(builder);
 }
Esempio n. 9
0
 /// <summary>
 /// Adds logging for request and response
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder AddLogging(this ISolidHttpBuilder builder) => builder.AddLogging <SolidHttpLogger>();
Esempio n. 10
0
 /// <summary>
 /// Add a global handler to be run when every Solid.Http request object is created.
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="action">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnRequestCreated(this ISolidHttpBuilder builder, Action <IServiceProvider, ISolidHttpRequest> action)
 {
     builder.Core.OnRequestCreated(action);
     return(builder);
 }
Esempio n. 11
0
 /// <summary>
 /// Configures Solid.Http to use a custom HttpClientProvider
 /// </summary>
 /// <typeparam name="TProvider">The custom HttpClientProvider type</typeparam>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="instance">The HttpClientFactory instance</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder UseHttpClientProvider <TProvider>(this ISolidHttpBuilder builder, TProvider instance) where TProvider : HttpClientProvider
 {
     builder.Core.UseHttpClientProvider <TProvider>(instance);
     return(builder);
 }
Esempio n. 12
0
 /// <summary>
 /// Configures Solid.Http to use a custom HttpClientProvider
 /// </summary>
 /// <typeparam name="TProvider">The custom HttpClientProvider type</typeparam>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="factory">The factory used to create the HttpClientFactory</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder UseHttpClientProvider <TProvider>(this ISolidHttpBuilder builder, Func <IServiceProvider, TProvider> factory) where TProvider : HttpClientProvider
 {
     builder.Core.UseHttpClientProvider <TProvider>(factory);
     return(builder);
 }
        /// <summary>
        /// Adds xml support using default settings
        /// </summary>
        /// <param name="builder">The builder</param>
        /// <returns>ISolidHttpSetup</returns>
        public static ISolidHttpBuilder AddXml(this ISolidHttpBuilder builder)
        {
            var settings = new DataContractSerializerSettings();

            return(builder.AddXml(settings));
        }
Esempio n. 14
0
 /// <summary>
 /// Configures Solid.Http to use one HttpClient for each host requested.
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder UseInstancePerHostHttpClientProvider(this ISolidHttpBuilder builder)
 {
     builder.Core.UseInstancePerHostHttpClientProvider();
     return(builder);
 }
Esempio n. 15
0
 /// <summary>
 /// Adds a deserializer factory used to deserialize the specified mime types
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="factory">The deserializer factory instance</param>
 /// <param name="mimeType">The mime type to deserialize</param>
 /// <param name="more">More mime types</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpBuilder AddDeserializer(this ISolidHttpBuilder builder, IResponseDeserializerFactory factory, string mimeType, params string[] more)
 {
     builder.Core.AddDeserializer(factory, mimeType, more);
     return(builder);
 }
Esempio n. 16
0
 /// <summary>
 /// Add a global handler to be run the moment every response is received
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="func">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnResponse(this ISolidHttpBuilder builder, Func <IServiceProvider, HttpResponseMessage, Task> func)
 {
     builder.Core.OnResponse(func);
     return(builder);
 }
Esempio n. 17
0
 /// <summary>
 /// Add a global handler to be run the moment every response is received
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="action">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnResponse(this ISolidHttpBuilder builder, Action <IServiceProvider, HttpResponseMessage> action)
 {
     builder.Core.OnResponse(action);
     return(builder);
 }
Esempio n. 18
0
 /// <summary>
 /// Add a global handler to be run just before every request is sent
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="func">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnRequest(this ISolidHttpBuilder builder, Func <HttpRequestMessage, Task> func)
 {
     builder.Core.OnRequest(func);
     return(builder);
 }
Esempio n. 19
0
 /// <summary>
 /// Add a global handler to be run just before every request is sent
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <param name="action">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpBuilder OnRequest(this ISolidHttpBuilder builder, Action <HttpRequestMessage> action)
 {
     builder.Core.OnRequest(action);
     return(builder);
 }