2016-07-11 9 views
3

Asp.net Core 1.0 MVC 6에서 작업 중 내 웹 사이트에서 RSS 피드를 제공하는 구성 요소를 작성하려고합니다.asp.net 코어 1.0에서 RSS 피드 만들기

System.ServiceModel.Syndication이 아직 ASP.NET CORE로 이식되지 않았 음을 나타내는 this post이 발견되었습니다.

전체 .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(); 
    }