Beispiel #1
0
        private Task <IFlurlResponse> CreateDatabaseAsync(QueryContext queryContext,
                                                          int?shards = null, int?replicas = null, bool?partitioned = null, CancellationToken cancellationToken = default)
        {
            IFlurlRequest request = NewRequest()
                                    .AppendPathSegment(queryContext.EscapedDatabaseName);

            if (shards.HasValue && shards.Value != 8)
            {
                request = request.SetQueryParam("q", shards.Value);
            }

            if (replicas.HasValue && replicas.Value != 3)
            {
                request = request.SetQueryParam("n", replicas.Value);
            }

            if (partitioned.HasValue && partitioned.Value)
            {
                request = request.SetQueryParam("partitioned", "true");
            }

            return(request
                   .AllowHttpStatus(HttpStatusCode.PreconditionFailed)
                   .PutAsync(null, cancellationToken)
                   .SendRequestAsync());
        }
        public IEnumerable <TResponse> Enumerate(IFlurlRequest request)
        {
            request.AllowHttpStatus(HttpStatusCode.NotFound);
            var more = true;

            while (more)
            {
                // Need headers & result so capture task first: https://stackoverflow.com/a/53514668/129269
                var task = request.GetAsync();

                var response = task.ConfigureAwait(false).GetAwaiter().GetResult();
                if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    throw new NotFoundException(request.Url.ToString());
                }
                var data = task.ReceiveJson <Multiple <TResponse> >().ConfigureAwait(false).GetAwaiter().GetResult();

                foreach (var item in data.Value)
                {
                    yield return(item);
                }

                more = response.Headers.TryGetValues("x-ms-continuationtoken", out var tokens);
                request.SetQueryParam("continuationToken", tokens?.First());
            }
        }
Beispiel #3
0
        private static async Task <T?> SendAsync <T>(this IFlurlRequest request,
                                                     MakeRequest makeRequest, DeserializeContent <T> deserializeContent, params HttpStatusCode[] defaultStatusCodes) where T : class
        {
            request.AllowHttpStatus(defaultStatusCodes);

            var response = await makeRequest(request).ConfigureAwait(false);

            if (defaultStatusCodes.Contains((HttpStatusCode)response.StatusCode))
            {
                return(default);
Beispiel #4
0
        public Task <T> GetAsync <T>(CancellationToken token, string uri)
        {
            IFlurlRequest request = _flurlClient.Request(uri)
                                    .WithTimeout(_timeOut)
                                    .WithHeaders(_headers);

            if (!string.IsNullOrEmpty(AllowHttpStatus))
            {
                request.AllowHttpStatus(AllowHttpStatus);
            }

            return(request.GetAsync().ReceiveJson <T>());
        }
Beispiel #5
0
        /// <inheritdoc />
        public async Task <TSource?> FindAsync(string docId, bool withConflicts    = false,
                                               CancellationToken cancellationToken = default)
        {
            IFlurlRequest request = NewRequest()
                                    .AppendPathSegment(docId);

            if (withConflicts)
            {
                request = request.SetQueryParam("conflicts", "true");
            }

            IFlurlResponse?response = await request
                                      .AllowHttpStatus(HttpStatusCode.NotFound)
                                      .GetAsync(cancellationToken)
                                      .ConfigureAwait(false);

            return(response != null && response.StatusCode == (int)HttpStatusCode.OK
                ? await response.GetJsonAsync <TSource>().ConfigureAwait(false)
                : null);
        }