public IActionResult PreviewImage(string workbookId, string viewId) { if (!IsOnline) { return(null); } var etag = $"\"{TenantId}.{workbookId}.{viewId}\""; var stringValues = this.Request.Headers.FindOrDefault(WebHelpers.HeaderStrings.IfNoneMatch); if (stringValues.Count == 1 && stringValues[0] == etag) { return(StatusCode(System.Net.HttpStatusCode.NotModified)); } stringValues = this.Request.Headers.FindOrDefault(WebHelpers.HeaderStrings.IfModifiedSince); if (stringValues.Count == 1 && stringValues[0] == etag) { DateTime dt; if (DateTime.TryParse(stringValues[0], out dt) && dt >= StartedAtUtc) { return(StatusCode(System.Net.HttpStatusCode.NotModified)); } } Response.Headers.Add(WebHelpers.HeaderStrings.ETag, etag); if (Response.Headers.ContainsKey(WebHelpers.HeaderStrings.CacheControl)) { Response.Headers.Remove(WebHelpers.HeaderStrings.CacheControl); } Response.Headers.Add(WebHelpers.HeaderStrings.LastModified, StartedAtUtc.ToRfc7231()); Response.Headers.Add(WebHelpers.HeaderStrings.CacheControl, "public"); var imageBytes = Cacher.FindOrCreate(Cache.CreateKey(workbookId, viewId), key => { byte[] previewImagesBytes = ReportVisualService.DownloadPreviewImageForTableauVisual(workbookId, viewId); if (previewImagesBytes != null) { //var fileResult = new FileContentResult(previewImagesBytes, "image/png"); return(new CacheEntry <byte[]>(previewImagesBytes)); } else { return(null); } }); return(new FileContentResult(imageBytes.Value, "image/png")); }