c# - 无论实际响应如何,Polly 重试策略结果始终成功

标签 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回声一堆东西 - 确切的内容不相关。正如您在谓词中所见,我正在结果主体中查找字符串“bla”。

问题是 policy.Outcome 总是成功(policy.Outcome == OutcomeType.Successful)但是“bla”是 < em>不在结果体中。

最佳答案

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

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

关于c# - 无论实际响应如何,Polly 重试策略结果始终成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418033/

相关文章:

c# - 在 Azure 函数中使用 RestSharp 调用 HTTPS 会给出 "The SSL connection could not be established"

.net - .NET 应用程序转向微服务——一些问题

c# - 关闭虚拟机会将所有虚拟机状态返回为未知

c# - 无法加载文件或程序集 'System.Web.Mvc' 或其依赖项之一。 2个项目。一次只有一个会工作

c# - 如何在用户控件中的两个控件之间绘制直线?

c# - 将 .NET P/Invoke 代码组织到 Win32 API 的最佳实践

.net - 如何使查询字符串防篡改?

c# - RestSharp - XmlSerializer 不使用 DateFormat 属性

c# - 从 C# 调用 Freebase Provider 时 FSharp.Data 'System.MissingMethodException'

c# - 依赖注入(inject)——何时使用属性注入(inject)