SyndicationFeed 未添加 rel="self" 属性

SyndicationFeed not adding rel="self" attribute

我正在使用 SyndicationFeed 生成 Atom 提要。

我似乎一切正常,除了当我使用 W3C Feed Validation Service 验证我的提要时,我收到以下警告。

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations. line 2, column 0: Missing atom:link with rel="self"

将属性添加到我创建的标签很容易,但如何才能 SyndicationFeed 添加它?我没有看到此设置。

这是我的 Feed 的第一部分。

<?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;

虽然我上面的代码添加了一个备用 link (rel="alternate"),但验证器也希望对原始提要添加一个 link (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);