public async Task <ChuckNorrisJoke[]> GetRandomJokesFromCategory(ApiJokeCategories 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 async Task <ChuckNorrisJoke> GetRandomJokeFromCategory(ApiJokeCategories category) { HttpResponseMessage result = await _client.GetAsync($"?category={category.ToApiCategoryParameter()}"); result.EnsureSuccessStatusCode(); ChuckNorrisJoke joke = await result.Content.ReadFromJsonAsync <ChuckNorrisJoke>(); return(joke); }
public static string ToApiCategoryParameter(this ApiJokeCategories 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. switch (category) { case ApiJokeCategories.Dev: return("dev"); case ApiJokeCategories.Food: return("food"); case ApiJokeCategories.Movie: return("movie"); default: throw new InvalidOperationException("unknown joke category"); } }