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); }