2016-07-11 23 views
3

Я работаю в Asp.net Core 1.0 MVC 6 Я пытаюсь написать компонент для предоставления RSS-каналов с моих сайтов.Создать RSS-канал в asp.net core 1.0

Я нашел this post, что предполагает, что System.ServiceModel.Syndication еще предстоит портировать в ASP.NET CORE.

Я не могу настроить таргетинг на всю платформу .NET.

Предположение состоит в том, чтобы написать как XML-парсер. Однако я изо всех сил стараюсь обойти все, что может потребоваться.

Я создал функциональность для получения моих данных в XML, но теперь вам нужно лучше понять, как разрешить это вызывать из IActionResult (или действительно, как создать ссылку, которая может быть размещена на моей странице).

Я могу предоставить образцы своего кода, но не уверен, что это будет полезно. Может ли кто-нибудь указать мне в правильном направлении примеры достижения этого?

Я также нашел ответ на этот пост, который указывает на некоторые идеи, но я думаю, что это заранее MVC6/Asp.net Ядра: RSS Feeds in ASP.NET MVC

+1

Я думаю, вы просто используете XmlWriter и напишите Xml для ответа. Все дело в том, чтобы создать правильную структуру и использовать правильные имена и пространства имен. – Pawel

ответ

2
// action to return the feed 
    [Route("site/GetRssFeed/{type}")] 
    public IActionResult GetRssFeed(ArticleStatusTypes type) 
    { 
     var feed = _rss.BuildXmlFeed(type); 
     return Content(feed, "text/xml"); 
    } 


    public string BuildXmlFeed(ArticleStatusTypes type) 
    { 

     var key = $"RssFeed{Convert.ToInt32(type)}{_appInfo.ApplicationId}"; 
     var articles = 
      _cache.GetCachedData(key) ?? 
      _cache.SetCache(key, _service.GetItems(Convert.ToInt32(type), _appInfo.CacheCount)); 

     StringWriter parent = new StringWriter(); 
     using (XmlTextWriter writer = new XmlTextWriter(parent)) 
     { 
      writer.WriteProcessingInstruction("xml-stylesheet", "title=\"XSL_formatting\" type=\"text/xsl\" href=\"/skins/default/controls/rss.xsl\""); 

      writer.WriteStartElement("rss"); 
      writer.WriteAttributeString("version", "2.0"); 
      writer.WriteAttributeString("xmlns:atom", "http://www.w3.org/2005/Atom"); 

      // write out 
      writer.WriteStartElement("channel"); 

      // write out -level elements 
      writer.WriteElementString("title", $"{_appInfo.ApplicationName} {type}"); 
      writer.WriteElementString("link", _appInfo.WebsiteUrl); 
      //writer.WriteElementString("description", Description); 
      writer.WriteElementString("ttl", "60"); 

      writer.WriteStartElement("atom:link"); 
      //writer.WriteAttributeString("href", Link + Request.RawUrl.ToString()); 
      writer.WriteAttributeString("rel", "self"); 
      writer.WriteAttributeString("type", "application/rss+xml"); 
      writer.WriteEndElement(); 

      if (articles != null) 
      { 
       foreach (var article in articles) 
       { 
        writer.WriteStartElement("item"); 

        writer.WriteElementString("title", article.Title); 
        writer.WriteElementString("link", _appInfo.WebsiteUrl); // todo build article path 
        writer.WriteElementString("description", article.Summary); 

        writer.WriteEndElement(); 
       } 
      } 

      // write out 
      writer.WriteEndElement(); 

      // write out 
      writer.WriteEndElement(); 
     } 

     return parent.ToString(); 
    } 
2

Они выпустили NuGet пакет предварительного просмотра Microsoft.SyndicationFeed. В реестре dotnet/wcf они предоставили example, чтобы вы могли работать.