SyndicationFeed не добавляет атрибут rel="self"
Я использую SyndicationFeed
генерировать канал Atom.
Кажется, у меня все работает, кроме тех случаев, когда я использую W3C Feed Validation Service для проверки своего канала, я получаю следующее предупреждение.
Этот фид действителен, но совместимость с самым широким диапазоном читателей фидов может быть улучшена путем реализации следующих рекомендаций. строка 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;
1 ответ
Хотя мой код выше добавляет альтернативную ссылку (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);