private void ProceesDetailResponse(string jsonResult, ImageDetailResponse imageDetailResponse)
        {
            var resultJObject = JObject.Parse(jsonResult);
            var result        = resultJObject.ToObject <FlickrDetailResponse>();

            if (result.stat == "ok")
            {
                imageDetailResponse.HasError     = false;
                imageDetailResponse.ErrorMessage = null;
                imageDetailResponse.Owner        = result.photo.owner.username;
                imageDetailResponse.Title        = result.photo.title._content;
                imageDetailResponse.Tags         = result.photo.tags.tag.Select(a => a._content).ToArray();
                imageDetailResponse.Urls         = result.photo.urls.url.Select(a => a._content).ToArray();
                imageDetailResponse.ThumbnailUrl = result.photo.thumbnailUrl;
            }
            else
            {
                imageDetailResponse.HasError     = true;
                imageDetailResponse.ErrorMessage = $"request Failed with code: { (result.code.HasValue ? result.code.Value.ToString() : "") }, message: { result.message }";
            }
        }
        public IActionResult getImageDetail([FromBody] ImageDetailRequest meta)
        {
            var imageDetailResponse = new ImageDetailResponse();

            if (string.IsNullOrWhiteSpace(meta.ImageId))
            {
                imageDetailResponse.HasError     = true;
                imageDetailResponse.ErrorMessage = "imageId must be supplied.";
                var errorResponse = new ObjectResult(imageDetailResponse);
                errorResponse.StatusCode = 200;
                return(errorResponse);
            }

            var cacheKey = GetMD5Hash(meta.ImageId);

            string cacheResult = "";

            if (EnableCaching)
            {
                cacheResult = _distributedCache.GetString(cacheKey);
            }

            if (!string.IsNullOrEmpty(cacheResult))
            {
                ProceesDetailResponse(cacheResult, imageDetailResponse);
            }
            else
            {
                using (HttpClient client = new HttpClient())
                {
                    client.BaseAddress = new Uri("https://api.flickr.com/");

                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(
                        new MediaTypeWithQualityHeaderValue("application/json"));

                    var querySuffix = makeDetailQuerySuffic(meta);

                    HttpResponseMessage flickrResponse = client.GetAsync(querySuffix).Result;
                    if (flickrResponse.IsSuccessStatusCode)
                    {
                        string jsonResult = flickrResponse.Content.ReadAsStringAsync().Result;

                        ProceesDetailResponse(jsonResult, imageDetailResponse);
                        if (!imageDetailResponse.HasError)
                        {
                            if (EnableCaching)
                            {
                                var options = new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(CacheSeconds));
                                _distributedCache.SetString(cacheKey, jsonResult, options);
                            }
                        }
                    }
                    else
                    {
                        imageDetailResponse.HasError     = true;
                        imageDetailResponse.ErrorMessage = $"request Failed with statusCode: { flickrResponse.StatusCode.ToString() }, reason: { flickrResponse.ReasonPhrase }";
                    }
                }
            }

            var response = new ObjectResult(imageDetailResponse);

            response.StatusCode = 200;
            return(response);
        }