Create RSS feed in asp.net core 1.0

会有一股神秘感。 提交于 2019-12-30 10:56:53

问题


I am working in Asp.net Core 1.0 MVC 6 I am trying to write a component to provide RSS feeds from my websites.

I found this post that suggests that System.ServiceModel.Syndication has yet to be ported to ASP.NET CORE.

I am unable to target the full .NET framework.

The suggestion is to write as an xml parser. I am however struggling to get my head around everything that might be required.

I have built the functionality to get my data into XML but now need to better understand how to allow this to be called from an IActionResult (or indeed how to generate a link that may be placed on my page).

I can provide samples of my code but am not sure it'll be helpful. Is anyone able to point me in the right direction of examples achieving this?

I also found an answer on this post which points towards some ideas but I think is pre MVC6/Asp.net Core: RSS Feeds in ASP.NET MVC


回答1:


They've released a preview NuGet package for Microsoft.SyndicationFeed. On the dotnet/wcf repo, they've provided an example to get you up and running.

EDIT: I've posted a Repo and a NuGet package that serves as a Middleware around this.




回答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();
}


来源:https://stackoverflow.com/questions/38303957/create-rss-feed-in-asp-net-core-1-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!