Рычание для 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-канала, но страница, генерируемая динамически, неправильно анализировалась анализатором, который я использовал.

Другие вопросы по тегам