예제 #1
0
        public async Task <IActionResult> Rss(CancellationToken cancellationToken)
        {
            var posts = await _mediator.Send(new SyndicationQuery(), cancellationToken).ConfigureAwait(true);

            var feed = new SyndicationFeed();

            feed.Copyright = new TextSyndicationContent($"{DateTime.Now.Year} {HttpContext.GetTenant().SiteTitle}");
            var items = new List <SyndicationItem>();

            foreach (var item in posts)
            {
                var hiddenId    = _mask.HideId(item.Id);
                var postUrl     = Url.Action("Show", "Story", new { id = hiddenId }, HttpContext.Request.Scheme);
                var title       = item.Title;
                var description = $"New {item.Type} posted by {item.LastAuthor}";
                items.Add(new SyndicationItem(title, description, new Uri(postUrl), hiddenId, (DateTimeOffset)item.PublishedAt.Value));
            }

            feed.Items = items;


            var settings = new XmlWriterSettings
            {
                Encoding            = Encoding.UTF8,
                NewLineHandling     = NewLineHandling.Entitize,
                NewLineOnAttributes = true,
                Indent = true,
                Async  = true,
            };

            await using var stream = new MemoryStream();
            using (var xmlWriter = XmlWriter.Create(stream, settings))
            {
                var rssFormatter = new Rss20FeedFormatter(feed, false);
                rssFormatter.WriteTo(xmlWriter);
                await xmlWriter.FlushAsync().ConfigureAwait(true);
            }

            return(File(stream.ToArray(), "application/rss+xml; charset=utf-8"));
        }
예제 #2
0
 public string Resolve(DtoWithId source, ViewModelWithId destination, string destMember, ResolutionContext context)
 {
     return(_masker.HideId(source.Id));
 }
예제 #3
0
 public string Resolve(StoryPostDto source, StoryPostViewModel destination, string destMember, ResolutionContext context)
 {
     return(_masker.HideId(source.Id));
 }