예제 #1
0
        public async Task <ChuckNorrisJoke> GetRandomJokeFromCategory(JokeCategories category)
        {
            HttpResponseMessage result = await _client.GetAsync($"?category={category.ToApiCategoryParameter()}");

            result.EnsureSuccessStatusCode();

            return(await result.Content.ReadAsAsync <ChuckNorrisJoke>());
        }
예제 #2
0
        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());
        }
예제 #3
0
 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")
     });