public async Task <ChuckNorrisJoke> GetRandomJokeFromCategory(JokeCategories category) { HttpResponseMessage result = await _client.GetAsync($"?category={category.ToApiCategoryParameter()}"); result.EnsureSuccessStatusCode(); return(await result.Content.ReadAsAsync <ChuckNorrisJoke>()); }
public async Task <ChuckNorrisJoke[]> GetRandomJokesFromCategory(JokeCategories category, int maxJokes) { maxJokes = Math.Clamp(maxJokes, 1, MaxJokesPerRequest); ChuckNorrisJoke[] result = await Task.WhenAll(Enumerable.Range(0, maxJokes).Select(_ => GetRandomJokeFromCategory(category))); HashSet <string> uniqueIds = new HashSet <string>(); return(result.Where(joke => uniqueIds.Add(joke.Id)).ToArray()); }
public static string ToApiCategoryParameter(this JokeCategories category) { // Man könnte auch mit .ToString() arbeiten, aber dann könnte beim // refaktoring des Enums möglicherweise eine Umbenennung stattfinden, // welche den API-Vertrag bricht. // Deshalb sicherheitshalber explizit die Umwandlung angeben. return(category switch { JokeCategories.Dev => "dev", JokeCategories.Food => "food", JokeCategories.Movie => "movie", _ => throw new InvalidOperationException("unknown joke category") });