/// <summary> /// Initializes a new instance. /// </summary> public FluentHttpRequest(IFluentHttpClient fluentHttpClient, HttpRequestMessage message, IDictionary <object, object> items = null) { FluentHttpClient = fluentHttpClient; Message = message; Items = items == null ? new Dictionary <object, object>() : new Dictionary <object, object>(items); }
/// <inheritdoc /> public IFluentHttpClient Add(IFluentHttpClient client) { if (client == null) { throw new ArgumentNullException(nameof(client)); } if (Has(client.Identifier)) { throw new ClientBuilderValidationException($"FluentHttpClient '{client.Identifier}' is already registered."); } _clientsMap.Add(client.Identifier, client); return(client); }
/// <summary> /// Build configured <see cref="IFluentHttpMiddlewareRunner"/>. /// </summary> /// <param name="httpClient">HTTP client which consumes this.</param> public IFluentHttpMiddlewareRunner Build(IFluentHttpClient httpClient) { var middleware = _middleware.ToList(); middleware.Add(new FluentHttpMiddlewareConfig(typeof(ActionExecuteMiddleware))); var clientContext = new FluentHttpMiddlewareClientContext(httpClient.Identifier); IFluentHttpMiddleware previous = null; for (int i = middleware.Count; i-- > 0;) { var pipe = middleware[i]; var isLast = middleware.Count - 1 == i; var isFirst = i == 0; object[] ctor; if (!isLast) { FluentHttpMiddlewareDelegate next = previous.Invoke; if (pipe.Args == null) { ctor = new object[] { next, clientContext } } ; else { const int additionalCtorArgs = 2; ctor = new object[pipe.Args.Length + additionalCtorArgs]; ctor[0] = next; ctor[1] = clientContext; Array.Copy(pipe.Args, 0, ctor, additionalCtorArgs, pipe.Args.Length); } } else { ctor = new object[] { } }; var instance = (IFluentHttpMiddleware)ActivatorUtilities.CreateInstance(_serviceProvider, pipe.Type, ctor); if (isFirst) { return(new FluentHttpMiddlewareRunner(instance)); } previous = instance; } throw new InvalidOperationException("Middleware wasn't build correctly."); } }
public void Setup() { var mockHttp = new MockHttpMessageHandler(); mockHttp.When(HttpMethod.Post, "https://sketch7.com/api/json") .Respond("application/json", request => request.Content.ReadAsStreamAsync().Result); mockHttp.When(HttpMethod.Post, "https://sketch7.com/api/msgpack") //.Respond("application/x-msgpack", "��Key�valeera�Name�Valeera�Title�Shadow of the Uncrowned") .Respond("application/x-msgpack", request => request.Content.ReadAsStreamAsync().Result); var fluentHttpClientFactory = BuildContainer() .GetRequiredService <IFluentHttpClientFactory>(); var clientBuilder = fluentHttpClientFactory.CreateBuilder("sketch7") .WithBaseUrl("https://sketch7.com") .UseLogging(new LoggerHttpMiddlewareOptions { //ShouldLogDetailedRequest = true, //ShouldLogDetailedResponse = true }) .UseTimer() .WithMessageHandler(mockHttp) ; _jsonHttpClient = fluentHttpClientFactory.Add(clientBuilder); clientBuilder = fluentHttpClientFactory.CreateBuilder("msgpacks") .WithBaseUrl("https://sketch7.com") .UseLogging(new LoggerHttpMiddlewareOptions { //ShouldLogDetailedRequest = true, //ShouldLogDetailedResponse = true }) .UseTimer() .WithMessageHandler(mockHttp) .ConfigureFormatters(x => x.Default = new MessagePackMediaTypeFormatter(ContractlessStandardResolver.Instance)) ; _messagePackHttpClient = fluentHttpClientFactory.Add(clientBuilder); }
/// <summary> /// Initializes a new instance. /// </summary> public FluentHttpRequestBuilder(IFluentHttpClient fluentHttpClient) { _fluentHttpClient = fluentHttpClient; }
/// <summary> /// Create and send a HTTP DELETE request and return content. /// </summary> /// <typeparam name="T">Type to deserialize content to.</typeparam> /// <param name="client">HTTP client instance</param> /// <param name="uri">Request resource uri to send.</param> /// <param name="data">Payload data content to send.</param> /// <param name="contentType">(Optional) content type to use when sending data.</param> /// <returns>Returns task with the result data.</returns> public static Task <T> Delete <T>(this IFluentHttpClient client, string?uri, object data, MediaTypeHeaderValue?contentType = null) => client.CreateRequest(uri) .AsDelete() .WithSuccessStatus() .WithBody(data, contentType) .Return <T>();
/// <summary> /// Create and send a HTTP GET request and return content. /// </summary> /// <typeparam name="T">Type to deserialize content to.</typeparam> /// <param name="client">HTTP client instance.</param> /// <param name="uri">Request resource uri to send.</param> /// <returns>Returns task with the result data.</returns> public static Task <T> Get <T>(this IFluentHttpClient client, string?uri) => client.CreateRequest(uri) .AsGet() .WithSuccessStatus() .Return <T>();
public static Fluent.IHaveUrl ForUrl(this IFluentHttpClient http, string url) { return(new Fluent.FluentHttpClientImp(http).Url(url)); }
public Common_TermsAndConditionsTest(ILogger <Common_TermsAndConditionsTest> logger, IFluentHttpClientFactory fluentHttpClientFactory) { _logger = logger; _fluentHttpClient = fluentHttpClientFactory.GetCommonClient(); }
public HttpFluentCircuit(IFluentHttpClient client, string circuitKey) { _client = client; _circuitKey = circuitKey; }
/// <summary> /// Creates a request for GraphQL. /// </summary> /// <returns></returns> public static FluentHttpRequestBuilder CreateGqlRequest(this IFluentHttpClient fluentHttpClient, GqlRequest request) => fluentHttpClient.CreateRequest().AsGql(request);
/// <summary> /// Creates a request for GraphQL. /// </summary> /// <returns>Returns request builder for chaining.</returns> public static FluentHttpRequestBuilder CreateGqlRequest(this IFluentHttpClient fluentHttpClient, string query, string?operationName = null) => fluentHttpClient.CreateRequest().AsGql(query, operationName);
public HttpCircuitBreaker(IFluentHttpClient client) { _client = client; }
public Auth_KeepAliveTest(ILogger <Auth_KeepAliveTest> logger, ISessionState sessionState, IFluentHttpClientFactory fluentHttpClientFactory) { _logger = logger; _sessionState = sessionState; _fluentHttpClient = fluentHttpClientFactory.GetAuthClient(); }
internal FluentHttpClientImp(IFluentHttpClient http) { _http = http; }
/// <summary> /// Create and send a HTTP PATCH request and return content. /// </summary> /// <typeparam name="T">Type to deserialize content to.</typeparam> /// <param name="client">HTTP client instance</param> /// <param name="uri">Request resource uri to send.</param> /// <param name="data">Payload data content to send.</param> /// <param name="contentType">(Optional) content type to use when sending data.</param> /// <returns>Returns task with the result data.</returns> public static Task <T> Patch <T>(this IFluentHttpClient client, string uri, object data, MediaTypeHeaderValue contentType = null) => client.CreateRequest(uri) .AsPatch() .WithBody(data, contentType) .Return <T>();
/// <summary> /// Creates a request for GraphQL. /// </summary> /// <returns></returns> public static FluentHttpRequestBuilder CreateGqlRequest(this IFluentHttpClient fluentHttpClient, GqlQuery query) => fluentHttpClient.CreateRequest().AsGql(query);
public static IHttpFluentCircuit WithCircuitBreaker(this IFluentHttpClient client, string circuitKey) { return(new HttpFluentCircuit(client, circuitKey)); }