/// <summary>
        /// Adds support for ZipArchive
        /// <para>Can create a deserializer for supplied mime types for zip archives</para>
        /// </summary>
        /// <param name="builder">The setup</param>
        /// <param name="mode">ZipArhive mode</param>
        /// <param name="additionalMimeTypes">Additional MimeTypes for the deserializer, the default one is application/zip</param>
        /// <returns>ISolidHttpCoreBuilder</returns>
        public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, ZipArchiveMode mode = ZipArchiveMode.Read, params string[] additionalMimeTypes)
        {
            var provider = new ZipArchiveSerializerSettingsProvider(mode);

            builder.Services.AddSingleton <IZipSerializerSettingsProvider>(provider);
            builder.Services.AddSolidHttpDeserializer <ZipArchiveResponseDeserializerFactory>("application/zip", additionalMimeTypes);

            return(builder);
        }
示例#2
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 ISolidHttpCoreBuilder AddDeserializer(this ISolidHttpCoreBuilder builder, IResponseDeserializerFactory factory, string mimeType, params string[] more)
 {
     builder.Services.AddSingleton <IDeserializer>(new Deserializer(mimeType, factory));
     foreach (var mime in more)
     {
         builder.Services.AddSingleton <IDeserializer>(new Deserializer(mime, factory));
     }
     return(builder);
 }
示例#3
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 ISolidHttpCoreBuilder AddDeserializer <TFactory>(this ISolidHttpCoreBuilder builder, string mimeType, params string[] more)
     where TFactory : class, IResponseDeserializerFactory
 {
     builder.Services.AddSingleton <TFactory>();
     builder.Services.AddSingleton <IDeserializer>(p => new Deserializer <TFactory>(mimeType, p.GetRequiredService <TFactory>()));
     foreach (var mime in more)
     {
         builder.Services.AddSingleton <IDeserializer>(p => new Deserializer <TFactory>(mime, p.GetRequiredService <TFactory>()));
     }
     return(builder);
 }
示例#4
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 ISolidHttpCoreBuilder UseHttpClientProvider <TProvider>(this ISolidHttpCoreBuilder builder, TProvider instance) where TProvider : HttpClientProvider
        {
            var descriptor = builder.Services.FirstOrDefault(d => d.ServiceType == typeof(IHttpClientProvider));

            if (descriptor != null)
            {
                builder.Services.Remove(descriptor);
            }
            builder.Services.AddSingleton <IHttpClientProvider>(instance);
            return(builder);
        }
示例#5
0
        private static ISolidHttpCoreBuilder On <T>(this ISolidHttpCoreBuilder builder, Func <IServiceProvider, T, Task> func)
        {
            if (func == null)
            {
                return(builder);
            }
            var descriptor = builder.Services.First(d => d.ServiceType == typeof(SolidAsyncEventHandler <T>));

            ((SolidAsyncEventHandler <T>)descriptor.ImplementationInstance).Handler += func;
            return(builder);
        }
示例#6
0
        private static ISolidHttpCoreBuilder On <T>(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, T> action)
        {
            if (action == null)
            {
                return(builder);
            }
            var descriptor = builder.Services.First(d => d.ServiceType == typeof(SolidEventHandler <T>));

            ((SolidEventHandler <T>)descriptor.ImplementationInstance).Handler += action;
            return(builder);
        }
示例#7
0
        /// <summary>
        /// Adds json support using supplied settings
        /// <para>Can create a deserializer for application/json, text/json, and text/javascript</para>
        /// </summary>
        /// <param name="builder">The builder</param>
        /// <param name="settings">Supplied JsonSerializerSettings</param>
        /// <returns>ISolidHttpCoreBuilder</returns>
        public static ISolidHttpCoreBuilder AddJson(this ISolidHttpCoreBuilder builder, JsonSerializerSettings settings)
        {
            var provider = new JsonSerializerSettingsProvider(settings);

            builder.Services.AddSingleton <IJsonSerializerSettingsProvider>(provider);
            builder.AddDeserializer <JsonResponseDeserializerFactory>("application/json", "text/json", "text/javascript");

            return(builder
                   .OnRequestCreated((services, request) =>
            {
                var p = services.GetRequiredService <IJsonSerializerSettingsProvider>();
                request.BaseRequest.Properties.Add("JsonSerializerSettings", p.GetJsonSerializerSettings());
            }));
        }
示例#8
0
        public static ISolidHttpCoreBuilder AddSharpCompress(this ISolidHttpCoreBuilder 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);
        }
        /// <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 ISolidHttpCoreBuilder AddXml(this ISolidHttpCoreBuilder builder, DataContractSerializerSettings settings)
        {
            var provider = new XmlSerializerSettingsProvider(settings);

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

            return(builder
                   .AddSolidHttpCoreOptions(options =>
            {
                options.Events.OnRequestCreated += (sender, args) =>
                {
                    var p = args.Services.GetRequiredService <IXmlSerializerSettingsProvider>();
                    args.Request.BaseRequest.Properties.Add("XmlSerializerSettings", p.GetXmlSerializerSettings());
                };
            }));
        }
        public static ISolidHttpCoreBuilder AddExceptionMappings(this ISolidHttpCoreBuilder 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);
        }
 /// <summary>
 /// Adds support for ZipArchive
 /// <para>Can create a deserializer for application/zip</para>
 /// </summary>
 /// <param name="builder">The setup</param>
 /// <param name="additionalMimeTypes">Additional zip mime types</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, params string[] additionalMimeTypes) =>
 builder.AddZip(ZipArchiveMode.Read, additionalMimeTypes);
示例#12
0
 public SolidHttpBuilder(ISolidHttpCoreBuilder core)
     : base(core)
 {
 }
示例#13
0
        /// <summary>
        /// Adds json support using default settings
        /// </summary>
        /// <param name="builder">The builder</param>
        /// <returns>ISolidHttpCoreBuilder</returns>
        public static ISolidHttpCoreBuilder AddJson(this ISolidHttpCoreBuilder builder)
        {
            var settings = new JsonSerializerSettings();

            return(builder.AddJson(settings));
        }
示例#14
0
 public SolidHttpBuilder(ISolidHttpCoreBuilder core)
 {
     _core = core;
 }
示例#15
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 ISolidHttpCoreBuilder OnRequestCreated(this ISolidHttpCoreBuilder builder, Action <ISolidHttpRequest> action)
 => builder.OnRequestCreated((_, c) => action(c));
示例#16
0
 /// <summary>
 /// Add a globa
 /// <param name="builder">The extended ISolidHttpBuilder</param>l handler to be run the moment every response is received
 /// </summary>
 /// <param name="func">The handler to be run</param>
 /// <returns>The builder</returns>
 public static ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Func <HttpResponseMessage, Task> func)
 => builder.OnResponse((_, c) => func(c));
示例#17
0
 /// <summary>
 /// Configures Solid.Http to use one HttpClient for the whole application
 /// </summary>
 /// <param name="builder">The extended ISolidHttpBuilder</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpCoreBuilder UseSingleInstanceHttpClientProvider(this ISolidHttpCoreBuilder builder) =>
 builder.UseHttpClientProvider <SingleInstanceHttpClientProvider>();
示例#18
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 ISolidHttpCoreBuilder OnRequestCreated(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, ISolidHttpRequest> action)
 => builder.On(action);
示例#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 ISolidHttpCoreBuilder OnRequest(this ISolidHttpCoreBuilder builder, Action <HttpRequestMessage> action)
 => builder.OnRequest((_, c) => action(c));
        /// <summary>
        /// Adds xml support using default settings
        /// </summary>
        /// <param name="builder">The builder</param>
        /// <returns>ISolidHttpSetup</returns>
        public static ISolidHttpCoreBuilder AddXml(this ISolidHttpCoreBuilder builder)
        {
            var settings = new DataContractSerializerSettings();

            return(builder.AddXml(settings));
        }
示例#21
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 ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Action <HttpResponseMessage> action)
 => builder.OnResponse((_, c) => action(c));
示例#22
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 ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Func <IServiceProvider, HttpResponseMessage, Task> func)
 => builder.On(func);
 /// <summary>
 /// Adds support for ZipArchive
 /// <para>Can create a deserializer for application/zip</para>
 /// </summary>
 /// <param name="builder">The setup</param>
 /// <param name="mode">The zip archive mode</param>
 /// <param name="additionalMimeTypes">Additional zip mime types</param>
 /// <returns>ISolidHttpBuilder</returns>
 public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, ZipArchiveMode mode, params string[] additionalMimeTypes)
 => ((ISolidHttpBuilder)builder).AddZip(mode, additionalMimeTypes) as ISolidHttpCoreBuilder;
示例#24
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 ISolidHttpCoreBuilder UseInstancePerHostHttpClientProvider(this ISolidHttpCoreBuilder builder) =>
 builder.UseHttpClientProvider <InstancePerHostHttpClientProvider>();
示例#25
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 ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, HttpResponseMessage> action)
 => builder.OnResponse(action.ToAsyncFunc());