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);
        }
Beispiel #3
0
        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");
            }
        }