0

SyndicationFeed用来生成 Atom 提要。

除了使用W3C 提要验证服务来验证提要时,我似乎一切正常,但收到以下警告。

此提要是有效的,但可以通过实施以下建议来提高与最广泛的提要阅读器的互操作性。第 2 行,第 0 列:缺少原子:带有 rel="self" 的链接

将属性添加到我创建的标签很容易,但我怎样才能SyndicationFeed添加它呢?我没有看到这个设置。

这是我提要的第一部分。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
   <title type="text">Insider Articles</title>
   <subtitle type="text">Insider Articles data feed.</subtitle>
   <id>http://www.insiderarticles.com/Syndication/Atom</id>
   <rights type="text">Copyright (c) 2016 Insider Articles. All Rights Reserved.</rights>
   <updated>2016-10-02T12:47:21-07:00</updated>
   <logo>http://www.insiderarticles.com/Content/Images/rss.jpg</logo>
   <link rel="alternate" href="http://www.insiderarticles.com/" />
   <entry>
   <!-- Etc... -->

这是我构建提要的方式(减去提要项)。

// Construct feed
SyndicationFeed feed = new SyndicationFeed(
    Properties.Settings.Default.ApplicationName,
    Properties.Settings.Default.FeedSummary,
    new Uri(Properties.Settings.Default.ApplicationDomainRoot),
    string.Format("{0}/Syndication/Atom", Properties.Settings.Default.ApplicationDomainRoot),
        DateTime.Now);
    feed.Language = "en-us";
    feed.Copyright = new TextSyndicationContent(Properties.Settings.Default.ApplicationCopyright);
    feed.ImageUrl = new Uri(string.Format("{0}/Content/Images/rss.jpg", uriRoot));
    feed.Items = items;
4

1 回答 1

0

尽管我上面的代码添加了一个备用链接 ( rel="alternate"),但验证器也想要一个指向原始提要的链接 ( rel="self")。

所以添加以下代码解决了这个问题。

string feedUrl = string.Format("{0}/Syndication/Atom", UrlBuilder.GetUriRoot(uri));

// Add feed (self) URL
var link = new SyndicationLink(new Uri(feedUrl));
link.RelationshipType = "self";
feed.Links.Add(link);
于 2016-10-02T20:29:40.910 回答