private IActionResult DeliverAsset(string appId, MediaItem?media, MediaFileQueryDto?query) { query ??= new MediaFileQueryDto(); if (media == null) { return(NotFound()); } var resizeOptions = query.ToResizeOptions(); FileCallback callback; if (query.CacheDuration > 0) { Response.Headers[HeaderNames.CacheControl] = $"public,max-age={query.CacheDuration}"; } var contentLength = (long?)null; if (media.Type == MediaType.Image && resizeOptions.IsValid) { callback = async(bodyStream, range, ct) => { var resizedAsset = $"{appId}_{media.FileName}_{resizeOptions}"; if (query.ForceResize) { await ResizeAsync(appId, media, bodyStream, resizedAsset, resizeOptions, true, ct); } else { try { await assetStore.DownloadAsync(resizedAsset, bodyStream, ct : ct); } catch (AssetNotFoundException) { await ResizeAsync(appId, media, bodyStream, resizedAsset, resizeOptions, false, ct); } } }; } else { contentLength = media.FileSize; callback = async(bodyStream, range, ct) => { await mediaFileStore.DownloadAsync(appId, media, bodyStream, range, ct); }; } return(new FileCallbackResult(media.MimeType, callback) { EnableRangeProcessing = contentLength > 0, ErrorAs404 = true, FileDownloadName = media.FileName, FileSize = contentLength, SendInline = query.Download != 1 }); }