Объект HttpRequestMessage
можно использовать только один раз;будущие попытки использовать тот же объект выдают исключение.Я использую Полли, чтобы повторить некоторые запросы и решаю эту проблему.Я знаю, как я могу клонировать запрос, существует множество примеров для SO, но я не могу понять, как клонировать запрос и отправлять этот новый запрос всякий раз, когда Полли повторяет попытку.Как я могу это сделать?
Это моя политика, для справки.Это приложение 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