using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
public int Id { get; set; }
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("price")]
public double Price { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; }
[JsonPropertyName("category")]
public string Category { get; set; }
[JsonPropertyName("image")]
public string Image { get; set; }
[JsonPropertyName("rating")]
public Rating Rating { get; set; }
[JsonPropertyName("rate")]
public double Rate { get; set; }
[JsonPropertyName("count")]
public int Count { get; set; }
private static readonly AsyncRetryPolicy<HttpResponseMessage> retryPolicy = Policy
.HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode)
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
(result, timeSpan, retryCount, context) =>
Console.WriteLine($"Retry {retryCount} due to: {result.Result?.StatusCode}. Waiting {timeSpan.TotalSeconds} seconds...");
public static async Task Main()
var httpClient = new HttpClient();
string url = "https://fakestoreapi.com/products";
var response = await httpClient.GetStringAsync(url);
Console.WriteLine(response);
var products = JsonSerializer.Deserialize<List<Product>>(response);
string jsonString = JsonSerializer.Serialize(products, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(jsonString);
Console.WriteLine($"Error occurred: {ex.Message}");
Console.WriteLine("*********************************");
Console.WriteLine("Using Retry policy");
Console.WriteLine("*********************************");
var response = await retryPolicy.ExecuteAsync(async () =>
await httpClient.GetAsync(url));
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseContent);
var products = JsonSerializer.Deserialize<List<Product>>(responseContent);
string jsonString = JsonSerializer.Serialize(products, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(jsonString);
Console.WriteLine($"Error occurred: {ex.Message}");