Beispiel #1
0
 /// <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);
        }
Beispiel #3
0
        /// <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.");
        }
    }
Beispiel #4
0
        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));
 }
Beispiel #9
0
 public Common_TermsAndConditionsTest(ILogger <Common_TermsAndConditionsTest> logger, IFluentHttpClientFactory fluentHttpClientFactory)
 {
     _logger           = logger;
     _fluentHttpClient = fluentHttpClientFactory.GetCommonClient();
 }
Beispiel #10
0
 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;
 }
Beispiel #14
0
 public Auth_KeepAliveTest(ILogger <Auth_KeepAliveTest> logger, ISessionState sessionState, IFluentHttpClientFactory fluentHttpClientFactory)
 {
     _logger           = logger;
     _sessionState     = sessionState;
     _fluentHttpClient = fluentHttpClientFactory.GetAuthClient();
 }
Beispiel #15
0
 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);
Beispiel #18
0
 public static IHttpFluentCircuit WithCircuitBreaker(this IFluentHttpClient client, string circuitKey)
 {
     return(new HttpFluentCircuit(client, circuitKey));
 }