Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET Core 1.0 RC2中使用RSS的正确方法_Rss_Asp.net Core_Asp.net Core Mvc_Asp.net Core 1.0 - Fatal编程技术网

在ASP.NET Core 1.0 RC2中使用RSS的正确方法

在ASP.NET Core 1.0 RC2中使用RSS的正确方法,rss,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Rss,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,使用C#中的ASP.NETCore1.0(RC2)从RSS提要获取数据的正确/最佳方法是什么 我想处理来自Wordpress博客的RSS提要中的数据,它是 我知道在ASP.net 4.x中,您会使用RssReader或SyndicationFeed,但我找不到ASP.net core的等效版本 这是我得到的返回原始提要的数据,但我不知道如何从中提取数据。我想列举这些项目,并从每个项目中获取标题和说明 var feedUrl = "https://blogs.msdn.microsoft.

使用C#中的ASP.NETCore1.0(RC2)从RSS提要获取数据的正确/最佳方法是什么

我想处理来自Wordpress博客的RSS提要中的数据,它是

我知道在ASP.net 4.x中,您会使用
RssReader
SyndicationFeed
,但我找不到ASP.net core的等效版本

这是我得到的返回原始提要的数据,但我不知道如何从中提取数据。我想列举这些项目,并从每个项目中获取
标题
说明

    var feedUrl = "https://blogs.msdn.microsoft.com/martinkearn/feed/";
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(feedUrl);
        var responseMessage = await client.GetAsync(feedUrl);
        var responseString = await responseMessage.Content.ReadAsStringAsync();
    }
根据,System.ServiceModel.Syndication尚未移植到ASP.NET核心。目前,您有两个选择:

  • 以完整的.NET框架为目标,提供对
    SyndicationFeed
  • 使用.NETCore构建您自己的XML解析器,以重现所需的功能
以完整的.NET框架为目标 根据您的需求,这无疑是最简单的方法

如果您将仅部署到windows,则可以在.NET 4.X framework上运行ASP.NET Core。要做到这一点,请从以下内容更新您的
project.json

frameworks": {
  "netcoreapp1.0": {
    "imports": [
      "dotnet5.6",
      "dnxcore50",
      "portable-net45+win8"
    ]
  }
}
为此:

frameworks": {
  "net452": {
     "frameworkAssemblies": {
         "System.ServiceModel": ""
     }
   }
}
构建自己的XML解析器
这将给您最大的灵活性,因为您仍然能够使用.NET核心框架跨平台运行。反序列化您已经获得的字符串需要做更多的工作,但是有很多关于如何实现这一点的示例,例如

为了完整起见,我将在答案的“构建您自己的XML解析器”部分包含最终代码,这是链接到的sample@Sock的精简版本@Sock的答案仍然是最完整的答案,但是这个示例对于任何想要快速、简单的ASP.NET核心代码示例的人来说都很有用

模型 控制器
公共类文章控制器:控制器
{
公共异步任务索引()
{
var articles=新列表();
var feedUrl=”https://blogs.msdn.microsoft.com/martinkearn/feed/";
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(feedUrl);
var responseMessage=await client.GetAsync(feedUrl);
var responseString=await responseMessage.Content.ReadAsStringAsync();
//提取饲料项目
XDocument doc=XDocument.Parse(responseString);
var feedItems=from doc.Root.subjects()中的项。首先(i=>i.Name.LocalName==“channel”).Elements()。其中(i=>i.Name.LocalName==“项”)
选择新的饲料项目
{
Content=item.Elements().First(i=>i.Name.LocalName==“description”).Value,
Link=item.Elements().First(i=>i.Name.LocalName==“Link”).Value,
PublishDate=ParseDate(item.Elements().First(i=>i.Name.LocalName==“pubDate”).Value),
Title=item.Elements().First(i=>i.Name.LocalName==“Title”).Value
};
articles=feedItems.ToList();
}
返回视图(文章);
}
私有日期时间解析日期(字符串日期)
{
日期时间结果;
if(DateTime.TryParse(日期,输出结果))
返回结果;
其他的
return DateTime.MinValue;
}
}
public class FeedItem
{
    public string Link { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public DateTime PublishDate { get; set; } 
}
public class ArticlesController : Controller
{
    public async Task<IActionResult> Index()
    {
        var articles = new List<FeedItem>();
        var feedUrl = "https://blogs.msdn.microsoft.com/martinkearn/feed/";
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(feedUrl);
            var responseMessage = await client.GetAsync(feedUrl);
            var responseString = await responseMessage.Content.ReadAsStringAsync();

            //extract feed items
            XDocument doc = XDocument.Parse(responseString);
            var feedItems = from item in doc.Root.Descendants().First(i => i.Name.LocalName == "channel").Elements().Where(i => i.Name.LocalName == "item")
                            select new FeedItem
                            {
                                Content = item.Elements().First(i => i.Name.LocalName == "description").Value,
                                Link = item.Elements().First(i => i.Name.LocalName == "link").Value,
                                PublishDate = ParseDate(item.Elements().First(i => i.Name.LocalName == "pubDate").Value),
                                Title = item.Elements().First(i => i.Name.LocalName == "title").Value
                            };
            articles = feedItems.ToList();
        }

        return View(articles);
    }

    private DateTime ParseDate(string date)
    {
        DateTime result;
        if (DateTime.TryParse(date, out result))
            return result;
        else
            return DateTime.MinValue;
    }
}