Обработка ошибок Azure KeyVault GetSecretAsync.Result.Value - PullRequest
0 голосов
/ 20 октября 2018

У меня есть следующая строка кода для возврата секрета из KeyVault

string kvSecret = kVClient.GetSecretAsync(azureKeyVaultUrl, secret).Result.Value;

Хотя это работает, как и ожидалось, я не очень хорошо знаю, как Result.Value синхронное выполнение обрабатывает ошибки времени выполнения, исключения и т. д.

Я пытаюсь понять, существует ли какая-либо возможность при вызове Result.Value, когда возникает ошибка, и возвращаемое значение на самом деле не секрет, а некоторая случайная ошибкапоэтому моя переменная kvSecret не содержит правильное значение, но что-то еще.

Причина, по которой я спрашиваю, заключается в том, что я хочу убедиться, что если переменная не пуста или пуста, она всегда будет содержать секретную, а не другую случайную строку.

1 Ответ

0 голосов
/ 21 октября 2018

К сожалению, клиент KeyVault предназначен для возврата Задачи с KeyVaultErrorException в случае, если секрет не существует вместо сообщения об ошибке \ result.

В вашем случае он взрывается, потому что при вызове .Result он разворачивает исключение внутри Задачи и нарушает поток выполнения.

Лучший способ получить секрет в KeyVault - это обернуть логику в блок Try \ Catch, как показано ниже:

try
{
    var secret = await client.GetSecretAsync(secretPath);
    //... any other logic here ...
}
catch (KeyVaultErrorException kvex)
{
    //handle key not found here
}
catch (HttpRequestException ex)
{
    //handle any other error here if needed
}

Чтобы упростить работу с keyvault, я обычно создаю класс для обработки этой логики, например:

public class SecretManager
{
    KeyVaultClient client;
    public SecretManager(KeyVaultClient client){ this.client = client; }

    public Task<string> GetSecretAsync(string secretName){
        //here I wrap the logic mentioned above
    }
}

.

Вышеуказанный фрагмент кода сверху внизмоя голова, не копия из производственного кода

Если вы используете логику, подобную приведенной выше, вместо того, чтобы выбрасывать исключение для секрета не найдено, вы делаете правильную обработку исключений и возвращаетенулевое значение или значение, представляющее не найденный секрет, тогда вы сможете развернуть результаты, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...