使用HTTPClient

时间:2018-05-18 13:14:23

标签: c#

所以我在解决这个问题的方法之后一直在寻找疯子,但我似乎无法找到答案。

所以,我需要在C#中向POST发送一个HTTPClient请求到服务器,如果服务器没有运行,它将继续发送请求,直到它连接(或死掉)经过一段时间的尝试)。但是我总是得到异常System.Net.Http.HttpRequestException,如果我只是存储它(或其他东西)并再试一次就不会有问题。

我找到了一些人们尝试这样做的方法,而且我已经尝试过所有这些方法。创建一个循环并捕获程序抛出的异常的for-loop,添加到计数器并再次尝试。创建一个循环到while-loop的{​​{1}}。如果无法连接,我甚至会重新启动程序(是的,我绝望了)。

所以,我必须看看你们中是否有人可能有解决这个问题的方法,或者你是否有更好的方法来解决这个问题。 这是运行的代码,感谢您的帮助! 编辑:只是为了增加一些清晰度,在" rep" -variable中抛出异常,代码永远不会超过该变量。我已经尝试将HTTPResponseMessage变量设为" var"并等待Postasync方法。

HttpResponseMessage.IsSuccessStatusCode == true

2 个答案:

答案 0 :(得分:0)

您必须查找重试库for example Polly

var policy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(_retryCount, retryAttempt => 
        TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

policy.Execute(() => DoSomething());

答案 1 :(得分:0)

解决方案可能是:

bool success = false;

while (!success)
{
    var rep = new HttpResponseMessage();

    try
    {
        rep = client.PostAsync("https://localhost:9999/", content).Result;

        //No exception here. Check your condition and set success = true if satisfied.
    }
    catch (Exception e)
    {
        //Log your exception if needed
    }
}