gpt4 book ai didi

c# - Azure KeyVault GetSecretAsync.Result.Value 错误处理

转载 作者:行者123 更新时间:2023-12-02 20:13:38 26 4
gpt4 key购买 nike

我有以下代码行从 KeyVault 返回 secret

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

虽然这按预期工作,但我不太清楚 Result.Value 同步执行如何处理运行时错误、异常等。

我试图了解当我调用 Result.Value 时是否有可能出现错误,并且返回的值实际上不是 secret ,而是一些随机错误,因此我的变量 kvSecret 没有t 包含正确的值,但包含其他内容。

我问这个的原因是我想确保如果变量不为 null 或空,它将始终包含 secret 而不是其他随机字符串。

最佳答案

不幸的是,KeyVault 客户端设计为在 secret 不存在的情况下返回带有 KeyVaultErrorException 的任务,而不是失败消息\结果。

在您的情况下,它会爆炸,因为当您调用 .Result 时,它会解开任务中的异常,并会中断执行流程。

在 KeyVault 中检索 secret 的最佳方法是将逻辑包装在 Try\Catch block 中,如下所示:

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
}
}

.

The above snipped is from the top of my head, not a copy from production code

如果您使用如上所述的逻辑,而不是抛出未找到 secret 的异常,而是进行适当的异常处理并返回空值或表示未找到 secret 的值,那么您将能够解开结果符合预期。

关于c# - Azure KeyVault GetSecretAsync.Result.Value 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52900713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com