【发布时间】:2018-08-05 23:57:35
【问题描述】:
我想使用Polly 不是检查明显的“失败”,而是检查其他情况。具体来说,我想进行一个(异步)调用,例如httpClient.GetAsync(...),就这个问题而言,我知道它会成功——也就是说,在执行以下操作之后:
var response = await _myHttpRequestPolicy.ExecuteAsync(() => httpClient.GetAsync(uri));
response.IsSuccessStatusCode 将是 true。
假设我做标准:
var content = await response.Content.ReadAsStringAsync();
和
content == { "Name":"Tom", "Age", 30", "ErrorCode":"12345" }
我希望我的策略逻辑根据响应的 ErrorCode 部分的内容(或不存在或存在)来执行。所以这只是我打的一个电话。
如何使用 Polly 做到这一点?
【问题讨论】:
-
您可以创建自己的继承自 Policy 的类并在那里实现您自己的失败逻辑。并使用该策略类将您的 web api 调用包装在 Polly 下。
-
github.com/App-vNext/… 检查文档中的此链接,认为它描述了您要执行的操作。
-
@Max 我现在正在阅读它-我将在一些代码中尝试一下,但我不清楚我可以在没有 1 的情况下执行 1b(链接部分的位置) ...
-
@Howiecamp 你能显示你的策略配置的代码吗?
-
@Howiecamp Polly 有
.HandleResult(...),您可以直接使用它,首先必须使用.Handle<SomeException>(...)。但是,如果结果条件依赖于通过额外的 async 调用检索响应,则单个 Polly 策略不涵盖这一点。请参阅this question and answer - 这是否也涵盖了您的问题?
标签: c# .net polly retrypolicy transient-failure