BlobSasQueryParameters
A  BlobSasQueryParameters object represents the components
             that make up an Azure Storage Shared Access Signature's query
             parameters.  You can construct a new instance using
              BlobSasBuilder.
            
             For more information,
             Create a service SAS.
             
                using System;
using System.Collections.Generic;
using System.Text;
namespace Azure.Storage.Sas
{
    public sealed class BlobSasQueryParameters
    {
        internal UserDelegationKeyProperties KeyProperties { get; set; }
        public string KeyObjectId => KeyProperties?.ObjectId;
        public string KeyTenantId => KeyProperties?.TenantId;
        public DateTimeOffset KeyStartsOn {
            get {
                if (KeyProperties != null)
                    return KeyProperties.StartsOn;
                return default(DateTimeOffset);
            }
        }
        public DateTimeOffset KeyExpiresOn {
            get {
                if (KeyProperties != null)
                    return KeyProperties.ExpiresOn;
                return default(DateTimeOffset);
            }
        }
        public string KeyService => KeyProperties?.Service;
        public string KeyVersion => KeyProperties?.Version;
        public static BlobSasQueryParameters Empty => new BlobSasQueryParameters();
        internal BlobSasQueryParameters()
            : this()
        {
        }
        internal BlobSasQueryParameters(string version, AccountSasServices? services, AccountSasResourceTypes? resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = null, string keyTid = null, DateTimeOffset keyStart = default(DateTimeOffset), DateTimeOffset keyExpiry = default(DateTimeOffset), string keyService = null, string keyVersion = null, string cacheControl = null, string contentDisposition = null, string contentEncoding = null, string contentLanguage = null, string contentType = null, string authorizedAadObjectId = null, string unauthorizedAadObjectId = null, string correlationId = null, string encryptionScope = null)
            : this(version, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, permissions, signature, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, authorizedAadObjectId, unauthorizedAadObjectId, correlationId, (int?)null, encryptionScope)
        {
            KeyProperties = new UserDelegationKeyProperties {
                ObjectId = keyOid,
                TenantId = keyTid,
                StartsOn = keyStart,
                ExpiresOn = keyExpiry,
                Service = keyService,
                Version = keyVersion
            };
        }
        internal BlobSasQueryParameters(IDictionary<string, string> values)
            : this(values)
        {
            this.ParseKeyProperties(values);
        }
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            KeyProperties.AppendProperties(stringBuilder);
            this.AppendProperties(stringBuilder);
            return stringBuilder.ToString();
        }
    }
}