我正在尝试在C#中使用API,这是请求的代码。它应该是一个简单的JSON API,但是我在这里遇到了一些违规行为。
public static HttpResponseMessage sendRequest(List<Header> headers, string endpoint, string api_key, string api_secret)
{
using (var client = new HttpClient())
{
List<Header> headerlist = new List<Header>{};
if(headers != null)
headerlist = headers;
List<Header> signed = Helpers.sign(endpoint, api_secret);
foreach (Header header in signed)
{
headerlist.Add(header);
}
client.BaseAddress = new Uri("https://api.coinkite.com");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("X-CK-Key", api_key);
foreach (Header header in headerlist)
{
client.DefaultRequestHeaders.Add(header.Name, header.Data);
}
HttpResponseMessage response = client.GetAsync(endpoint).Result;
return response;
}
}
我通过
打电话HttpResponseMessage result = Requests.sendRequest(null, "/v1/my/self", api_key, api_secret);
return result.Content.ToString();
然而,当我把它写到控制台时,它看起来像:
System.Net.Http.SteamContent
有关问题的任何线索?我对流内容类型不太熟悉。
答案 0 :(得分:5)
HttpContent没有实现ToString方法。因此,您需要使用result.Content.CopyToAsync(Stream)
将结果内容复制到Stream。
然后您可以使用StreamReader读取该流。
或者你可以使用
string resultString = result.Content.ReadAsStringAsync().Result;
直接将结果读成字符串。这种方法不需要使用StreamReader所以我建议这样做。
答案 1 :(得分:0)
在HttpResponseMessage上调用GetResponse()
Stream stream = result.GetResponseStream();
StreamReader readStream = new StreamReader(stream, Encoding.UTF8);
return readStream.ReadToEnd();
答案 2 :(得分:0)
如果您只对内容感兴趣,可以通过更改
直接获取字符串HttpResponseMessage response = client.GetAsync(endpoint).Result;
到
string response = client.GetStringAsync(endpoint).Result;
https://msdn.microsoft.com/en-us/library/hh551746(v=vs.118).aspx