2016-07-11 25 views
3

Ich arbeite in Asp.net Core 1.0 MVC 6 Ich versuche, eine Komponente zu schreiben, um RSS-Feeds von meinen Websites zu bieten.Erstellen RSS-Feed in asp.net Core 1.0

Ich fand this post, die vorschlägt, dass System.ServiceModel.Syndication noch zu ASP.NET CORE portiert werden muss.

Ich kann das vollständige .NET-Framework nicht anvisieren.

Der Vorschlag ist, als XML-Parser zu schreiben. Ich kämpfe jedoch um alles, was erforderlich sein könnte.

Ich habe die Funktionalität gebaut, um meine Daten in XML zu bekommen, aber jetzt muss ich besser verstehen, wie man das von einem IActionResult aufrufen kann (oder wie man einen Link erzeugt, der auf meiner Seite platziert werden kann).

Ich kann Beispiele meines Codes bereitstellen, bin mir aber nicht sicher, ob es hilfreich sein wird. Kann mir jemand in die richtige Richtung zeigen, dass Beispiele dies erreichen?

fand ich auch eine Antwort auf diesen Beitrag, der auf einige Ideen weist aber ich denke, ist pre MVC6/Asp.net Kern: RSS Feeds in ASP.NET MVC

+1

Ich denke, Sie würden einfach XmlWriter verwenden und Xml auf die Antwort schreiben. Die Sache ist, sicherzustellen, dass Sie eine korrekte Struktur erstellen und korrekte Namen und Namespaces verwenden. – Pawel

Antwort

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(); 
    } 
Verwandte Themen