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