I'm quite new to REST-services in general and I'm playing around with ServiceStack (which is awesome!). I have some services running and now I want to be able to download files (zip) via the service.
My idea is to set a route (/download) to receive files and download them with the client to store them locally.
My current approach looks like this:
[Route("/download")] public class DownloadRequest : IReturn<HttpResult> { } public class FileDownloadService : Service { public object Any(DownloadRequest request) { string fileFullPath = @"C:\Users\marcel\Downloads\test.zip"; string mimeType = "application/zip"; FileInfo fi = new FileInfo(fileFullPath); byte[] reportBytes = File.ReadAllBytes(fi.FullName); HttpResult result = new HttpResult(reportBytes, mimeType); result.Headers.Add("Content-Disposition", "attachment;filename=Download.zip;"); return result; } } I'd like to change this implementation to send data as stream. I stumbled upon IStreamWriterAsync, but couldn't really find documentation on usage for this. I'd also like to be able to handle client-side download with the ServiceStack C#-Client.
What would be a good strategy do implement my plan?
Edit: Something like that?
[Route("/download")] public class DownloadRequest : IReturn<Stream> { } public class FileDownloadService : Service, IHasOptions { public IDictionary<string, string> Options { get; private set; } public Stream Any(DownloadRequest request) { string fileFullPath = @"C:\Users\marcel\Downloads\test.zip"; FileInfo fi = new FileInfo(fileFullPath); Options = new Dictionary<string, string> { {"Content-Type","application/zip" }, {"Content-Disposition", "attachment;filename=Download.zip;" } }; return fi.OpenRead(); } }