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