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")); }
public string Resolve(DtoWithId source, ViewModelWithId destination, string destMember, ResolutionContext context) { return(_masker.HideId(source.Id)); }
public string Resolve(StoryPostDto source, StoryPostViewModel destination, string destMember, ResolutionContext context) { return(_masker.HideId(source.Id)); }