c# - AWS 开发工具包、C#:捕获 GetUserAsync 异常并继续
问题描述
我在 dotnetcore 3.1(C#) 上,并且正在使用 AWS 开发工具包。我有一个测试凭据的功能,我GetUserAsync
使用AmazonIdentityManagementServiceClient
. 问题是,当我的凭据错误时,会引发异常并停止执行。
public async Task<GetUserResponse> TestCredentials(string accessId, string accessKey)
{
AWSCredentials awsCredentials = new BasicAWSCredentials(accessId, accessKey);
AmazonIdentityManagementServiceClient client = new AmazonIdentityManagementServiceClient(awsCredentials);
var userAsync = client.GetUserAsync();
try
{
await userAsync;
}
catch (Exception ex)
{
// Log the error here
var something = 100;
}
return userAsync.Result;
}
当使用不正确的登录名时,我仍然想处理一个结果,但是由于执行已经停止(至少在我的测试中),我无法用它做任何事情。如何告诉我的代码捕获异常,并仍然返回userAsync.Result
?
以下是我的完整性测试。
[TestMethod()]
public async Task TestBadCredentialsTest()
{
var awsAccessKeyId = "WRONG";
var awsSecretAccessKey = "EVENWORSE";
AWSCredentialsService awsCredentialsService = new AWSCredentialsService();
var getUserResponse = await awsCredentialsService.TestCredentials(awsAccessKeyId, awsSecretAccessKey);
// Test never gets to here
var httpStatus = getUserResponse.HttpStatusCode;
Assert.AreNotEqual(HttpStatusCode.OK, httpStatus);
}
任何帮助是极大的赞赏。
解决方案
任务可能会以异常或结果完成。它永远不可能两者兼得。
不同的 HTTP 客户端库具有不同的功能——我对 AWS 并不熟悉——但它们中的许多都有一种可以抛出的“详细异常”类型。如果您捕获了特定的异常类型,那么您可以获得异常详细信息,有时甚至可以获得整个 HTTP 响应本身。但是,您可用的类型和方法都取决于客户端库。
推荐阅读
- odata - 如何在 OData 调用中排除多个值?
- docker - Nodemon 和 Docker 的“错误:找不到模块”,即使安装了卷
- java - 在 Anylogic 中使用 Java - 如何将变量字符串转换为类型“TargetLine”
- regex - 获取匹配模式perl的所有出现
- java - 我可以将 Spring WebFlux 应用程序部署为 WAR
- google-cloud-platform - 在谷歌云计算引擎上使用 smtp.gmail.com 和 465 端口从 php 发送电子邮件
- java - Tomcat 不调用控制器 api
- symfony - Symfony3 反序列化
- linux-kernel - centos/redhat 从 5.x 升级到 6.x
- ios - 子类化文本字段时,区域设置未从情节提要中获取