I read this 'Stream was already consumed' error using Polly to retry requests in ASP.NET Core but cannot see where to clone the http request message.
So in my code, I register httpclient like:
var httpClientBuilder = serviceCollection.AddHttpClient("CustomHttpClientName");httpClientBuilder.AddHttpMessageHandler(ctx=>...)httpClientBuilder.AddPolicyHandler(GetRetryPolicy());
private static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy(){ return HttpPolicyExtensions.HandleTransientHttpError() .OrResult(result => !result.IsSuccessStatusCode) .OrResult(result => { var elem = result.Content.ReadFromJsonAsync<JsonElement>().GetAwaiter().GetResult(); return elem.TryGetProperty("error", out _); }) .WaitAndRetryAsync( sleepDurations: Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromSeconds(1), retryCount: 3), onRetry: (outcome, timespan, retryCount, context) => { context.GetLogger()?.LogWarning("Delaying for {Delay}ms, then making retry {Retry}.", timespan.TotalMilliseconds, retryCount); });}
and then http client call:
var request = CreateRequest(jsonContent, HttpMethod.Post, uri);await GetClient().SendAsync(request, cancellationToken); // here I get runtime exception
I want to do a retry if in response json I see error
field.
Above code leads to InvalidOperationException: 'The stream was already consumed. It cannot be read again'