Рычание для Windows - RSS-канал не анализируется - ошибка формата?
Поэтому я пытаюсь использовать пользовательский SDK подписчика для Growl для Windows. Попытка динамически создать канал RSS. Используя C#, с представлениями Razor. Это пример того, как выглядит представление, на которое я указываю URL подписчика:
@model GrowlExtras.Subscriptions.FeedMonitor.FeedItem
<?xml version="1.0" encoding="UTF-8" ?>
@{
Response.ContentType = "application/rss+xml";
ViewBag.Title = "Feed";
}
<rss version="2.0">
<channel>
<title>@Model.Title</title>
<link>@Url.Action("Feed", "Home", null, "http")</link>
<description>@Model.Description</description>
<lastBuildDate>@Model.PubDate</lastBuildDate>
<language>en-us</language>
</channel>
</rss>
Эта страница доступна локально (на данный момент), используя этот URL: http://localhost:2751/Home/Feed
, Итак, я помещаю этот URL-адрес как "Feed Url:" во "всплывающее окно подписки на уведомления"... но при получении ошибки "не удалось разобрать ленту", и в результате OpenReadCompletedEventArgs e возникает исключение "OpenReadCompletedEventArgs" (e.Result).Length'сгенерировал исключение типа'System.NotSupportedException'"
Любая помощь приветствуется! Я полностью лаю здесь не то дерево или просто что-то пропустил при форматировании файла канала? Не думайте, что это как-то связано с тем, что страница в данный момент размещается локально?
2 ответа
Реальный ответ заключается в том, что Razor проверяет, что то, что вы пытаетесь написать, является правильным HTML. Если вам не удастся сделать это, Razor не получится.
Ваш код пытался написать неправильный HTML:
Если вы посмотрите документацию по тегу ссылки в w3schools, вы можете прочитать одно и то же, выраженное по-разному:
- "Элемент является пустым элементом, он содержит только атрибуты".
- "В HTML у тега нет конечного тега".
Это означает, что ссылка является одноэлементным тегом, поэтому вы должны написать этот тег как самозакрывающийся тег, например так:
<link atrib1='value1' attrib2='value2' />
Таким образом, вы не можете делать то, что пытались сделать: использовать открывающий и закрывающий тег с содержимым внутри.
Вот почему Razor не может создать это ваше <xml>
док.
Но есть один способ обмануть Razor: не позволяйте ему знать, что вы пишете тег, вот так:
@Html.Raw("<link>")--your link's content--@Html.Raw("</link>")
Помните, что Razor предназначен для написания HTML, поэтому написание XML с ним может стать несколько сложным.
Правильно. Получил этот отсортированный сейчас.
Требовалось гораздо больше копать! Например, вышеприведенная страница не была правильно обработана как допустимая XML-страница - здесь генерируются HTML-теги, и это вызывает анализатор rss рассматриваемого плагина.
В итоге я использовал встроенные классы RSS-синдикации и некоторую помощь из этих постов / связанных ответов на эту тему.
<http://stackru.com/a/825016/1152015>
<http://stackru.com/a/684518/1152015>
<http://stackru.com/a/1292769/1152015>
<http://stackru.com/a/2690302/1152015>
<http://stackru.com/a/3098559/1152015>
<http://msdn.microsoft.com/en-us/library/bb412174>
Итак, чтобы уточнить - у меня был код для использования RSS-канала, но страница, генерируемая динамически, неправильно анализировалась анализатором, который я использовал.