【急】生成RSS Feed时, 每次应从数据库取几条

stg609 2014-03-22 12:22:18
最近想利用SyndicationFeed 为站点提供一个RSS源,参考其它人的代码,发现其中只是取出最新几条记录,那更早的记录怎么获取?


public FeedResult Rss()
{
postColl = postSrv.GetAllPost(8); // 只取出8条记录,而数据库中实际上有几百条记录

List<SyndicationItem> itms = new List<SyndicationItem>();
foreach (var post in postColl)
{
SyndicationItem itm = new SyndicationItem(post.Title.Trim(), post.Abstract,post.Url, new DateTimeOffset(post.LastUpdateDate))
{
PublishDate = post.CreateDate
};

itms.Add(itm);
}

var feed = new SyndicationFeed(blogName, blogDescription, blogUrl, itms) { Language = Thread.CurrentThread.CurrentUICulture.Name, LastUpdatedTime = DateTime.Now };

return new FeedResult(new Rss20FeedFormatter(feed, false)) { ContentEncoding = System.Text.UTF8Encoding.UTF8 };
}


通过这段代码生成的RSS如下:


我用RSS阅读器订阅后,发现只能看见这8条,无法看到更早的记录。是不是上面的写法有问题?


...全文
198 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
stg609 2014-03-23
  • 打赏
  • 举报
回复
由于本贴包含众多干扰信息,拟重新开一贴请教。
stg609 2014-03-22
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
postColl = postSrv.GetAllPost(int.MaxValue);


可这样的话,一次性显示的RSS体积不就很大了?

我看了下其它人的RSS输出都只有几条,拿老赵博客的RSS举个例子,他文章有上百篇吧,但输出也只有不足50条(最后一条是12年发的),当我用阅读器订阅的时候却能阅读超过50篇的文章,可以看到09年发的文章。

  • 打赏
  • 举报
回复
postColl = postSrv.GetAllPost(int.MaxValue);
winner2050 2014-03-22
  • 打赏
  • 举报
回复

postColl = postSrv.GetAllPost(8);
我想这段代码仅仅支持显示8行数据。 鉴定完毕。
stg609 2014-03-22
  • 打赏
  • 举报
回复

补上图片
stg609 2014-03-22
  • 打赏
  • 举报
回复
再换种说法 我浏览器中访问自己的RSS源,显示X条,通过阅读器访问也是X条。 我浏览器中访问老赵的RSS源,显示X条,通过阅读器访问不止X条。 请问,何解?
stg609 2014-03-22
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
论坛不是侃大山的地方。我们沟通了思路,搞懂你在皮毛数字上反复纠缠,而不是改变思路去表达需求,也就没有什么可说的的。

别人有很好的新的处理思路,但是不值得介绍给你。因为你在此问题上,可能难以理解任何需要改变思路的东西,而是喜欢抄结果、纠结表面上一两个数字。


论坛的确不是侃大山的地方,但却是提供大家互相探讨的地方。CSDN本来就一个开放给所有层次的人学习探讨技术的地方,如果每个人都像你这般自以为了不起,那还有哪个新人会愿意留在这里。

你认为自己很厉害(对RSS深有了解),觉得我没表达清楚需求,大可以直接把你的疑问表示出来,大家互相探讨把问题解决。而如果你自己都对RSS不清楚,请别要求别人应该怎么样怎么样。

再者,你如果肯花点时间认真看我发的内容,就应该明白我所表达的需求,我根本不在乎这个数字的大小,我在乎的是能不能通过RSS阅读器取到更老的记录!!!!

如果我上面有什么讲错的,欢迎指出来。

--------------------- 回到正题 -----------------------------------

在发贴提出这个问题的时候我想过很多种表达方式,考虑到大家普遍没有耐心看长内容,所以我才尽量精简,配上图片进行提问。

如果有其它人也没明白我需求的话,我重新整理下:

简单的描述就是,我在RSS阅读器上只能读取到最新的8条记录,无法获取更老的记录。


如果没看明白,那接着往下看。

1. 首先,对于RSS订阅,我承认自己是个新手,也没有怎么用过类似Google Reader的阅读器。但是最近因为业务需要,所以开始研究RSS订阅。

根据网上找到的资料,整理了自己的RSS 代码,代码就如上面所述,为了便于大家阅读,我再粘一下

public FeedResult Rss()
{
postColl = postSrv.GetAllPost(8); // 只取出8条记录,而数据库中实际上有几百条记录

List<SyndicationItem> itms = new List<SyndicationItem>();
foreach (var post in postColl)
{
SyndicationItem itm = new SyndicationItem(post.Title.Trim(), post.Abstract,post.Url, new DateTimeOffset(post.LastUpdateDate))
{
PublishDate = post.CreateDate
};

itms.Add(itm);
}

var feed = new SyndicationFeed(blogName, blogDescription, blogUrl, itms) { Language = Thread.CurrentThread.CurrentUICulture.Name, LastUpdatedTime = DateTime.Now };

return new FeedResult(new Rss20FeedFormatter(feed, false)) { ContentEncoding = System.Text.UTF8Encoding.UTF8 };
}


上面是MVC中名叫 rss 的action中的代码,其中我只取出8条记录,这个数字在Stackoverflow网站上,大家给的说法是不要大于20。


2. 代码写完了,我自然是要拿来测试下(此时数据库中对应表中的记录有上百条)。

首先,我直接在浏览器中访问,显示结果如下:

数了一下,正好8条



然后,我使用QQ邮箱尝试订阅,但是显示在阅读器中的记录一共就只有8条(和图片中一样)。而且也没有任何可以进入下一页的入口,我以为逻辑就是这样的。

3. 对比测试,我换成老赵的RSS订阅源试了下。
同样先是在浏览器中访问,读取出的记录条数有40条。然后使用QQ邮箱订阅,原以为也只能拿出40条。但是,阅读器中的数据却远远不止40条。


我认为出现这种可能性的原因是因为我的RSS代码写的有问题。请高手帮忙。


如果对于上述文字还有哪里让你困扰,请让我知道。
  • 打赏
  • 举报
回复
论坛不是侃大山的地方。我们沟通了思路,搞懂你在皮毛数字上反复纠缠,而不是改变思路去表达需求,也就没有什么可说的的。 别人有很好的新的处理思路,但是不值得介绍给你。因为你在此问题上,可能难以理解任何需要改变思路的东西,而是喜欢抄结果、纠结表面上一两个数字。
  • 打赏
  • 举报
回复
一会儿(10)嫌少,一会儿(int.MaxValue)嫌多,一会儿(50)又嫌少....... 你想闹哪样?!你难道看不出问题? 你自己动动脑筋,自己想想到底要多少条?或者自己想想要表达的思路吧。然后再说出你的真正的问题来。
stg609 2014-03-22
  • 打赏
  • 举报
回复
UP, 期待解答~~
stg609 2014-03-22
  • 打赏
  • 举报
回复
引用 5 楼 likofans 的回复:
那你就 postColl = postSrv.GetAllPost(50);
那超过第50条的记录怎么办?如果我一共有100条,那剩下50条就这样无人问津了
likofans 2014-03-22
  • 打赏
  • 举报
回复
那你就 postColl = postSrv.GetAllPost(50);

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧