2015-05-05 44 views
1
using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("https://www.googleapis.com/youtube/v3/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    HttpResponseMessage response = client.GetAsync("search?q=manam&type=video&order=relevance&part=snippet&maxResults=50&key=AIzaSyA4GZFAgfvsAItwFRmnAZvbTHoDeyunf2k").Result; 
    if (response.IsSuccessStatusCode) 
    { 
     dynamic lists = await response.Content.ReadAsAsync<mycustomObject>(); // what should I write here 
    } 
} 

我想在我的項目中使用web api調用YouTube視頻。 這是我到現在爲止所嘗試的代碼, 以獲得響應我應該在myCustomObject的地方使用什麼?youtube api in c#code

當我在瀏覽器上面的URL我正在嘗試的數據,當我跑上面的代碼返回null,

任何問題上面的代碼?

我只是想從這種方法得到的數據,

任何幫助將不勝感激。

回答

3

您需要一個表示從調用返回的JSON數據的類。

如果你調用在瀏覽器中你GET要求你會看到JSON響應看起來是這樣的:

{ 
    kind: "youtube#searchListResponse" 
    etag: ""tbWC5XrSXxe1WOAx6MK9z4hHSU8/lh-waoy9ByBY2eB-oZs7niK51FU"" 
    nextPageToken: "CDIQAA" 
    pageInfo: 
     { 
      totalResults: 176872 
      resultsPerPage: 50 
     }- 
    items: [...50]- 
} 

所以,你需要創建一個類字段匹配其反序列化命令然後填充爲您。事情是這樣的:

public class YoutubeApiResponse() 
{ 
    public string kind {get; set;} 
    public string etag {get; set;} 
    public string nextPageToken {get; set;} 
    public PageInfo pageInfo {get; set;} 
    public List<Item> items {get; set;} 
} 

而且這樣調用:

var youtubeResponse = await response.Content.ReadAsAsync<YoutubeApiResponse().Result(); 

我建議你看.Net Client Library - 它將採取了很多這方面的東西對你的照顧。

+0

你是什麼意思? – RagtimeWilly

+0

您可以創建自己的方法,將字段作爲參數並構造URL來封裝邏輯。你是這個意思嗎? – RagtimeWilly

+0

沒問題,很高興幫助。 – RagtimeWilly