Exemple #1
0
        /// <summary>
        /// 根据标签筛选空间获取空间名列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public BucketItemResultDto GetBucketList(GetBucketParam request)
        {
            UrlParameter urlParameter = new UrlParameter();

            request.TagFilters.ForEach(tag => { urlParameter.Add(tag.Key, tag.Value); });
            string url =
                $"http://rs.qbox.me/buckets?tagCondition={Base64.UrlSafeBase64Encode(urlParameter.GetQueryResult())}";

            _httpClient.Headers = new Dictionary <string, string>()
            {
                { "Authorization", $"{_storageProvider.GetManageToken(new GetManageTokenParam(url))}" }
            };
            try
            {
                var response = _httpClient.GetString(url);
                return(GetResponse(response, () =>
                {
                    var bucketList = _jsonProvider.Deserialize <List <string> >(response);
                    Expression <Func <string, bool> > condition = x => true;
                    if (!string.IsNullOrEmpty(request.Prefix))
                    {
                        condition = condition.And(x => x.StartsWith(request.Prefix));
                    }

                    var list = bucketList.Where(condition.Compile()).ToList();
                    if (!string.IsNullOrEmpty(request.Marker))
                    {
                        var index = list.ToList().IndexOf(request.Marker);
                        if (index != -1)
                        {
                            list = list.Skip(index + 1).ToList();
                        }
                    }

                    if (request.PageSize != -1)
                    {
                        var isTruncated = list.Take(request.PageSize).Count() != list.Count;
                        return new BucketItemResultDto(
                            list.Take(request.PageSize).Select(x => new BucketItemResultDto.BucketItemDto(null, x))
                            .ToList(), request.Prefix,
                            isTruncated, request.Marker,
                            isTruncated ? list.Take(request.PageSize).LastOrDefault() : "");
                    }

                    return new BucketItemResultDto(
                        list.Select(x => new BucketItemResultDto.BucketItemDto(null, x)).ToList(), request.Prefix,
                        false, request.Marker, "");
                },
                                   resultResponse =>
                                   new BucketItemResultDto(request.Prefix, request.Marker,
                                                           $"{resultResponse.Error}|{resultResponse.ErrorCode}")));
            }
            catch (Exception ex)
            {
                this._logger?.LogError(ex.ExtractAllStackTrace());
                return(new BucketItemResultDto(request.Prefix, request.Marker, $"lose {ex.Message}"));
            }
        }