public async Task<string> GetAsync(string key)
{
string value = null;
CachedApplicationSetting cachedSetting;
if (_cachedSettings.TryGetValue(key, out cachedSetting))
{
if (cachedSetting.ExpiresAt > DateTimeOffset.UtcNow)
{
value = cachedSetting.Value;
}
}
if (value == null)
{
if (_localConfiguration != null)
{
value = await _localConfiguration.GetAsync(key);
}
if (string.IsNullOrWhiteSpace(value))
{
try
{
string keyVaultEncodedKey = _keyEncoder.Encode(key);
value = await _vault.GetSecretAsync(keyVaultEncodedKey);
}
catch (AggregateException ex)
{
KeyVaultClientException kex = ex.InnerExceptions.FirstOrDefault() as KeyVaultClientException;
if (kex != null && kex.Status == HttpStatusCode.NotFound)
{
value = null;
}
else
{
throw;
}
}
}
if (_cachePolicy != null)
{
if (value != null || _cachePolicy.CacheNotFoundAsNull)
{
CachedApplicationSetting newSetting = new CachedApplicationSetting
{
ExpiresAt = DateTimeOffset.UtcNow.Add(_cachePolicy.ExpiresAfter),
Key = key,
Value = value
};
_cachedSettings.AddOrUpdate(key, newSetting, (k, e) => newSetting);
}
}
}
return value;
}
}