protected virtual dynamic ProcessResponse(INancyModule module, HttpRequestMessage request, IFeed feed, IQueryable <IInternalPackage> ds) { long?total = request.GetInlineCount(); var packageRepository = _packageRepositoryFactory.Create(feed.Id); bool endsWithSlash = _portalConfig.ListenPrefixes.EndsWith("/"); var baseAddress = string.Format("{0}{1}feeds/{2}/api/v2/", _portalConfig.ListenPrefixes, endsWithSlash ? "" : "/", feed.Name); var stream = ODataPackages.CreatePackagesStream(baseAddress, packageRepository, baseAddress, ds, feed.Id, total.HasValue ? int.Parse(total.Value.ToString()) : 0); StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); return(new Response { ContentType = "application/atom+xml; charset=utf-8", Contents = contentStream => { var byteData = Encoding.UTF8.GetBytes(text); contentStream.Write(byteData, 0, byteData.Length); } }); }
protected virtual dynamic ProcessResponse(INancyModule module, IFeed feed, IInternalPackage package) { bool endsWithSlash = _portalConfig.ListenPrefixes.EndsWith("/"); var baseAddress = string.Format("{0}{1}feeds/{2}/api/v2/", _portalConfig.ListenPrefixes, endsWithSlash ? "" : "/", feed.Name); NuGetODataModelBuilderODataPackage builder = new NuGetODataModelBuilderODataPackage(); builder.Build(); var writerSettings = new ODataMessageWriterSettings() { Indent = true, CheckCharacters = false, BaseUri = new Uri(baseAddress), Version = ODataVersion.V3 }; writerSettings.SetContentType(ODataFormat.Atom); var responseMessage = new MemoryResponseMessage(); var writer = new ODataMessageWriter(responseMessage, writerSettings); var entryWriter = writer.CreateODataEntryWriter(); entryWriter.WriteStart(ODataPackages.MapPackageToEntry(baseAddress, new ODataPackage(package))); entryWriter.WriteEnd(); var msgStream = responseMessage.GetStream(); msgStream.Seek(0, SeekOrigin.Begin); StreamReader reader = new StreamReader(msgStream); string text = reader.ReadToEnd(); return(new Response { ContentType = "application/atom+xml; charset=utf-8", Contents = contentStream => { var byteData = Encoding.UTF8.GetBytes(text); contentStream.Write(byteData, 0, byteData.Length); } }); }