UserDelegationKeyProperties
Encapsulates the shared properties used by both
            BlobSasQueryParameters and DataLakeSasQueryParameters.
            
                using System;
using System.Globalization;
using System.Net;
using System.Text;
namespace Azure.Storage.Sas
{
    internal class UserDelegationKeyProperties
    {
        internal string ObjectId { get; set; }
        internal string TenantId { get; set; }
        internal DateTimeOffset StartsOn { get; set; }
        internal DateTimeOffset ExpiresOn { get; set; }
        internal string Service { get; set; }
        internal string Version { get; set; }
        public void AppendProperties(StringBuilder stringBuilder)
        {
            if (!string.IsNullOrWhiteSpace(ObjectId))
                stringBuilder.AppendQueryParameter("skoid", ObjectId);
            if (!string.IsNullOrWhiteSpace(TenantId))
                stringBuilder.AppendQueryParameter("sktid", TenantId);
            DateTimeOffset dateTimeOffset;
            if (StartsOn != DateTimeOffset.MinValue) {
                dateTimeOffset = StartsOn;
                stringBuilder.AppendQueryParameter("skt", WebUtility.UrlEncode(dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)));
            }
            if (ExpiresOn != DateTimeOffset.MinValue) {
                dateTimeOffset = ExpiresOn;
                stringBuilder.AppendQueryParameter("ske", WebUtility.UrlEncode(dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)));
            }
            if (!string.IsNullOrWhiteSpace(Service))
                stringBuilder.AppendQueryParameter("sks", Service);
            if (!string.IsNullOrWhiteSpace(Version))
                stringBuilder.AppendQueryParameter("skv", Version);
        }
    }
}