private async Task <HttpResponseMessage> ListContainersAsync() { var client = DashConfiguration.NamespaceAccount.CreateCloudBlobClient(); // Extract query parameters var queryParams = this.Request.GetQueryParameters(); var includeFlags = String.Join(",", queryParams.Values <string>("include")); ContainerListingDetails listDetails = ContainerListingDetails.None; Enum.TryParse(includeFlags, true, out listDetails); var retval = new ContainerListResults { RequestVersion = this.Request.GetHeaders().Value("x-ms-version", StorageServiceVersions.Version_2009_09_19), ServiceEndpoint = this.Request.RequestUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped), Prefix = queryParams.Value <string>("prefix"), Marker = queryParams.Value <string>("marker"), MaxResults = queryParams.ValueOrNull <int>("maxresults"), IncludeDetails = listDetails, }; retval.Containers = await client.ListContainersSegmentedAsync( retval.Prefix, listDetails, retval.MaxResults == 0?(int?)null : retval.MaxResults, new BlobContinuationToken { NextMarker = retval.Marker, }, null, null); return(CreateResponse(retval)); }
static void SerializeContainerListing(XmlWriter writer, ContainerListResults results) { writer.WriteStartElement("EnumerationResults"); var uri = new UriBuilder(results.ServiceEndpoint); if (results.RequestVersion >= StorageServiceVersions.Version_2013_08_15) { writer.WriteAttributeString("ServiceEndpoint", results.ServiceEndpoint); } else { writer.WriteAttributeString("AccountName", results.ServiceEndpoint); } writer.WriteElementStringIfNotNull("Prefix", results.Prefix); writer.WriteElementStringIfNotNull("Marker", results.Marker); writer.WriteElementStringIfNotNull("MaxResults", results.MaxResults); writer.WriteStartElement("Containers"); foreach (var container in results.Containers.Results) { writer.WriteStartElement("Container"); writer.WriteElementString("Name", container.Name); if (results.RequestVersion < StorageServiceVersions.Version_2013_08_15) { writer.WriteElementString("Url", uri.AddPathSegment(container.Name).Uri.ToString()); } writer.WriteStartElement("Properties"); writer.WriteElementString("Last-Modified", container.Properties.LastModified); writer.WriteElementString("Etag", container.Properties.ETag); if (results.RequestVersion >= StorageServiceVersions.Version_2012_02_12) { writer.WriteElementStringIfNotEnumValue("LeaseStatus", container.Properties.LeaseStatus, LeaseStatus.Unspecified); writer.WriteElementStringIfNotEnumValue("LeaseState", container.Properties.LeaseState, LeaseState.Unspecified); writer.WriteElementStringIfNotEnumValue("LeaseDuration", container.Properties.LeaseDuration, LeaseDuration.Unspecified); } writer.WriteEndElement(); // Properties if (results.IncludeDetails.IsFlagSet(ContainerListingDetails.Metadata)) { writer.WriteStartElement("Metadata"); foreach (var metadataItem in container.Metadata) { writer.WriteElementString(metadataItem.Key, metadataItem.Value); } writer.WriteEndElement(); // Metadata } writer.WriteEndElement(); // Container } writer.WriteEndElement(); // Containers if (results.Containers.ContinuationToken != null) { writer.WriteElementStringIfNotNull("NextMarker", results.Containers.ContinuationToken.NextMarker); } writer.WriteEndElement(); // EnumerationResults }
private async Task<HttpResponseMessage> ListContainersAsync() { var client = DashConfiguration.NamespaceAccount.CreateCloudBlobClient(); // Extract query parameters var queryParams = this.Request.GetQueryParameters(); var includeFlags = String.Join(",", queryParams.Values<string>("include")); ContainerListingDetails listDetails = ContainerListingDetails.None; Enum.TryParse(includeFlags, true, out listDetails); var retval = new ContainerListResults { RequestVersion = this.Request.GetHeaders().RequestVersion, ServiceEndpoint = this.Request.RequestUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped), Prefix = queryParams.Value<string>("prefix"), Marker = queryParams.Value<string>("marker"), MaxResults = queryParams.ValueOrNull<int>("maxresults"), IncludeDetails = listDetails, }; retval.Containers = await client.ListContainersSegmentedAsync( retval.Prefix, listDetails, retval.MaxResults == 0 ? (int?)null : retval.MaxResults, new BlobContinuationToken { NextMarker = retval.Marker, }, null, null); return CreateResponse(retval); }