1

我正在使用NuGet 上可用的 HttpClient

这是我开始的代码:

string url = "http://example.com/rssfeed.rss";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.Clear();
client.DefaultRequestHeaders.Add("User-Agent", "CheesoTest");
var task = client.GetAsync(url);
try
{
    task.Wait();
    HttpResponseMessage resp = task.Result;

    var t2 = resp.Content.ReadAsAsync<RSS.Feed>();
    t2.Wait();
    var result = t2.Result;
}
catch (Exception e1)
{
    MessageBox.Show("Exception: " + e1.ToString());
}

问题:

  1. 我必须使用 DataContract/DataMember 属性显式定义RSS.Feed和装饰它。看起来确实应该内置一个 RSS 类。是吗?(也许我只是不知道)

  2. 这会失败,并出现一个抱怨 RSS 提要中的处理指令的异常。它实际上是一个样式表,我不在乎。我只想要数据。

例外是:

异常:System.AggregateException:发生一个或多个错误。---> System.InvalidOperationException: XML 文档 (1, 2) 中存在错误。---> System.Xml.XmlException:不支持处理指令(XML 声明除外)和 DTD。第 1 行,位置 2。

提要如下所示:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0">
   <channel><title>blah foo fizz bang</title>....

关于更好的方法的任何提示?使用 HttpClient!!

我发现文档有点薄。

4

1 回答 1

0

或者,您是否查看过 WCF 的 SyndicationFeed?System.ServiceModel.dll 有一个SyndicationFeed.Load(XmlReader)方法,可以将提要反序列化为 SyndicationFeed 对象。

于 2012-10-04T20:22:24.490 回答