/// <summary> /// Parse URI for SAS (Shared Access Signature) and snapshot information. /// </summary> /// <param name="address">The complete Uri.</param> /// <param name="credentials">The credentials to use.</param> private void ParseQueryAndVerify(StorageUri address, StorageCredentials credentials) { StorageCredentials parsedCredentials; DateTimeOffset? parsedSnapshot; this.attributes.StorageUri = NavigationHelper.ParseBlobQueryAndVerify(address, out parsedCredentials, out parsedSnapshot); if ((parsedCredentials != null) && (credentials != null) && !parsedCredentials.Equals(credentials)) { string error = string.Format(CultureInfo.CurrentCulture, SR.MultipleCredentialsProvided); throw new ArgumentException(error); } if (parsedSnapshot.HasValue && this.SnapshotTime.HasValue && !parsedSnapshot.Value.Equals(this.SnapshotTime.Value)) { string error = string.Format(CultureInfo.CurrentCulture, SR.MultipleSnapshotTimesProvided, parsedSnapshot, this.SnapshotTime); throw new ArgumentException(error); } if (parsedSnapshot.HasValue) { this.SnapshotTime = parsedSnapshot; } if (this.ServiceClient == null) { this.ServiceClient = new CloudBlobClient(NavigationHelper.GetServiceClientBaseAddress(this.StorageUri, null /* usePathStyleUris */), credentials ?? parsedCredentials); } this.Name = NavigationHelper.GetBlobName(this.Uri, this.ServiceClient.UsePathStyleUris); }
/// <summary> /// Initializes a new instance of the <see cref="CloudBlockBlob"/> class using the specified blob name and /// the parent container reference. /// If snapshotTime is not null, the blob instance represents a Snapshot. /// </summary> /// <param name="blobName">Name of the blob.</param> /// <param name="snapshotTime">Snapshot time in case the blob is a snapshot.</param> /// <param name="container">The reference to the parent container.</param> internal CloudBlockBlob(string blobName, DateTimeOffset?snapshotTime, CloudBlobContainer container) { CommonUtility.AssertNotNullOrEmpty("blobName", blobName); CommonUtility.AssertNotNull("container", container); this.attributes = new BlobAttributes(); this.attributes.StorageUri = NavigationHelper.AppendPathToUri(container.StorageUri, blobName); this.ServiceClient = container.ServiceClient; // Set the relativized name from the URI. this.Name = NavigationHelper.GetBlobName(this.attributes.Uri, this.ServiceClient.UsePathStyleUris); this.container = container; this.SnapshotTime = snapshotTime; this.Properties.BlobType = BlobType.BlockBlob; }