private async Task <KeyVaultSecret> GetValueAsync(string key)
        {
            if (_kvClient == null)
            {
                return(null);
            }

            VersionedKey vKey = new VersionedKey(key);

            // If we successfully preloaded key names, see if the requested key is valid before making network request.
            if (!_preload || _preloadFailed || _allKeys.Contains(vKey.Key, StringComparer.OrdinalIgnoreCase))
            {
                try
                {
                    string version = _version ?? vKey.Version;
                    if (version != null)
                    {
                        KeyVaultSecret versionedSecret = await _kvClient.GetSecretAsync(vKey.Key, version);

                        if (versionedSecret != null && versionedSecret.Properties.Enabled.GetValueOrDefault())
                        {
                            return(versionedSecret);
                        }
                        return(null);
                    }

                    KeyVaultSecret secret = await _kvClient.GetSecretAsync(vKey.Key);

                    if (secret != null && secret.Properties.Enabled.GetValueOrDefault())
                    {
                        return(secret);
                    }
                    return(null);
                }
                catch (RequestFailedException rfex)
                {
                    // Simply return null if the secret wasn't found
                    //if (rfex.ErrorCode == "SecretNotFound" || rfex.ErrorCode == "BadParameter")
                    // .ErrorCode doesn't get populated. :/
                    // "SecretNotFound" == 404
                    // "BadParameter" = 400
                    if (rfex.Status == 404 || rfex.Status == 400)
                    {
                        return(null);
                    }

                    // If there was a permission issue or some other error, let the exception bubble
                    // FYI: kve.Body.Error.Code == "Forbidden" :: No Rights, or secret is disabled.
                    if (!Optional)
                    {
                        throw;
                    }
                }
            }

            return(null);
        }
        private async Task <SecretBundle> GetValueAsync(string key)
        {
            if (_kvClient == null)
            {
                return(null);
            }

            VersionedKey vKey = new VersionedKey(key);

            if (!_preload || _preloadFailed || _allKeys.Contains(vKey.Key, StringComparer.OrdinalIgnoreCase))
            {
                try
                {
                    string version = !String.IsNullOrWhiteSpace(_version) ? _version : vKey.Version;
                    if (version != null)
                    {
                        SecretBundle versionedSecret = await _kvClient.GetSecretAsync(_uri, vKey.Key, version);

                        return(versionedSecret);
                    }

                    SecretBundle secret = await _kvClient.GetSecretAsync(_uri, vKey.Key);

                    return(secret);
                }
                catch (KeyVaultErrorException kve)
                {
                    // Simply return null if the secret wasn't found
                    if (kve.Body.Error.Code == "SecretNotFound" || kve.Body.Error.Code == "BadParameter")
                    {
                        return(null);
                    }

                    // If there was a permission issue or some other error, let the exception bubble
                    // FYI: kve.Body.Error.Code == "Forbidden" :: No Rights, or secret is disabled.
                    if (!Optional)
                    {
                        throw;
                    }
                }
            }

            return(null);
        }