如何使用c#拨打boardgamegeek api?

时间:2014-11-07 03:56:54

标签: c# asp.net api asp.net-web-api

我打电话给www.boardgamegeek.com API。

我正在使用以下代码:

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://www.boardgamegeek.com/xmlapi/collection/dhasmain");
    client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/xml"));

    // List data response.
    HttpResponseMessage response = client.GetAsync("?own=1").Result; 
    if (response.IsSuccessStatusCode)
    {
        var dataObjects = response.Content.ReadAsStringAsync().Result;
    }
    else
    {
        Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
    }

但它显示结果=尚未计算

有人可以告诉我这是什么问题吗?

我也使用下面的代码,但它没有返回任何内容。

string dataObjects ="&#34 ;;         HttpClient client = new HttpClient();         client.BaseAddress = new Uri(" http://www.boardgamegeek.com/xmlapi/collection/zefquaavius");         client.DefaultRequestHeaders.Accept.Add(       new MediaTypeWithQualityHeaderValue(" application / xml"));

    client.GetStringAsync("?own=1").ContinueWith(task =>
    {
        dataObjects = task.Result;
    });

1 个答案:

答案 0 :(得分:0)

您正在异步调用get并且在访问结果时没有给调用足够的时间来完成调用。完成请求后,您可以使用ContinueWith来响应呼叫:

client.GetStringAsync("?own=1").ContinueWith(task =>
    {
        string dataObjects = task.Result;
    });

编辑:根据您的评论,我看到了您的UTF-8编码问题。下面的代码将处理编码问题,因此您可以从响应中获得一串XML。

byte[] dataObjects = null;
client.GetByteArrayAsync("?own=1").ContinueWith(task => { dataObjects = task.Result; }).Wait();
string xmlResponse = System.Text.Encoding.UTF8.GetString(dataObjects);