无论实际响应如何,Polly重试政策结果总是成功的

时间:2017-06-07 16:20:27

标签: c# .net restsharp polly

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

在我的测试案例中,我使用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的回应回复了一堆内容 - 具体内容并不相关。正如你在谓词中看到的那样,我正在寻找字符串&#34; bla&#34;在结果体中。

问题在于policy.Outcome 总是成功(policy.Outcome == OutcomeType.Successful)但是&#34; bla&#34;在结果正文中

1 个答案:

答案 0 :(得分:4)

.HandleResult<TResult>(Func<TResult, bool>)子句指定您希望被视为失败的TResult - TResult值应该(在这种情况下)触发重试。如果&#34; bla&#34;不在结果体中,结果将被视为成功,将不会进行重试,并且您将(预期行为)获得.Outcome == OutcomeType.Successful

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