4

我正在尝试利用Polly处理任意结果条件的能力https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-处理

在我的测试用例中,我使用RestSharp发出 HTTP 请求。这是我的示例代码:

var policy = Policy
    .HandleResult<IRestResponse>(r => r.Content.Contains("bla"))
    .Retry(2)
    .ExecuteAndCapture(() =>
        {
            IRestClient client = new RestClient("https://httpbin.org/anything");
            IRestRequest request = new RestRequest(Method.GET);
            var response = client.Execute(request);
            return response;
        });

对https://httpbin.org/anything的调用会回显一堆东西——确切的内容是不相关的。正如您在谓词中看到的那样,我正在结果正文中寻找字符串“bla”。

问题是policy.Outcome总是成功的 ( policy.Outcome == OutcomeType.Successful) 但“bla”不在结果正文中。

4

1 回答 1

6

.HandleResult<TResult>(Func<TResult, bool>)子句指定TResult您希望被视为失败的 s -TResult应该(在这种情况下)触发重试的值。如果结果正文中没有“bla”,则结果将被视为成功,不会进行重试,并且您将(预期行为)得到.Outcome == OutcomeType.Successful.

Polly 代码库中的以下单元测试演示了应该如何.ExecuteAndCapture(...)返回OutcomeType.Failurehttps ://github.com/App-vNext/Polly/blob/73fc38029f52d2e1bfa6f4b03bcb1e12d8c78065/src/Polly.SharedSpecs/PolicyTResultSpecs.cs#L50

于 2017-06-08T07:35:09.543 回答