簡體   English   中英

使用HttpClient,如何清潔地讀取和反序列化RSS feed?

[英]using the HttpClient, how can I cleanly read and de-serialize an RSS feed?

我正在使用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. 我必須明確定義RSS.Feed並使用DataContract / DataMember屬性對其進行修飾。 似乎應該內置一個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!

我發現文檔有些薄。

另外,您是否看過WCF的SyndicationFeed? System.ServiceModel.dll具有SyndicationFeed.Load(XmlReader)方法,可以將提要反序列化為SyndicationFeed對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM