public virtual async Task <IHttpActionResult> Download(Guid sourceId) { var fileSource = context.GetDataSource <FileDataSource>(sourceId); if (fileSource == null) { return(NotFound()); } var memoryStream = await streamManager.RetrieveData(sourceId, fileSource.CurrentFileName); var contentLength = memoryStream.Length; MediaTypeHeaderValue mediaType; MediaTypeHeaderValue.TryParse(fileSource.MediaType, out mediaType); var contentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileSource.OriginalFileName, Size = contentLength }; var result = new FileActionResult( Request, memoryStream, mediaType, memoryStream.Length, contentDisposition); return(result); }