4

オブジェクトはHttpRequestMessage一度しか使用できません。今後同じオブジェクトを使用しようとすると、例外がスローされます。Polly を使用していくつかのリクエストを再試行していますが、この問題が発生しています。リクエストを複製する方法は知っています.SOにはたくさんの例がありますが、リクエストを複製して、Pollyが再試行するたびにその新しいリクエストを送信する方法がわかりません. どうすればこれを達成できますか?

参考までに、これらは私のポリシーです。これは Xamarin アプリです。ネットワーク障害が発生した場合に数回再試行したいのですが、応答が承認されていない場合は、保存された資格情報で再認証し、元の要求を再試行したいと考えています。

public static PolicyWrap<HttpResponseMessage> RetryPolicy
{
    get => WaitAndRetryPolicy.WrapAsync(ReAuthPolicy);
}

private static IAsyncPolicy WaitAndRetryPolicy
{
    get => Policy.Handle<WebException>().WaitAndRetryAsync(4, _ => TimeSpan.FromSeconds(2));
}

private static IAsyncPolicy<HttpResponseMessage> ReAuthPolicy
{
    get => Policy.HandleResult<HttpResponseMessage>(x => x.StatusCode == HttpStatusCode.Unauthorized)
        .RetryAsync((_, __) => CoreService.LogInWithSavedCredsAsync(true));
}

これは再利用のために機能しませんHttpRequestMessageが、私が達成しようとしていることです:

var request = new HttpRequestMessage(HttpMethod.Post, "some_endpoint")
{
    Content = new StringContent("some content")
};

request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var policyResponse = await ConnectivityHelper.RetryPolicy
    .ExecuteAndCaptureAsync(() => _client.SendAsync(request)).ConfigureAwait(false);

// handle outcome
4

1 に答える 1