public async Task <DownloadAssetResult> Handle(DownloadAssetQuery request, CancellationToken cancellationToken) { var asset = await _db.Assets.SingleOrDefaultAsync(e => e.Uuid == request.Id && e.ReleaseId != null); if (asset is null) { throw new AppException(AppErrorCode.NotFound); } cancellationToken.ThrowIfCancellationRequested(); string url = _objectStorage.SupportsDownloadUrl ? await _objectStorage.GetDownloadUrl(asset.StoragePath, expiry : _downloadUrlExpiry, contentType : _contentType, fileName : asset.Name, cancellationToken : cancellationToken) : null; cancellationToken.ThrowIfCancellationRequested(); var stream = _objectStorage.SupportsDownloadStream ? await _objectStorage.GetDownloadStream(asset.StoragePath, cancellationToken : cancellationToken) : null; cancellationToken.ThrowIfCancellationRequested(); _logger.LogInformation("URL for downloading asset with UUID {0}: {1}", asset.Uuid, url); return(new DownloadAssetResult { Url = url, Name = asset.Name, Stream = stream }); }