我刚创建了一个HTTP get请求,以便从我的控制台应用程序的堆栈溢出中获取内容(所有徽章),如下所示 :
public void getStackBadges()
{
var client = new HttpClient();
client.BaseAddress = new Uri("https://api.stackexchange.com/docs//badges?order=desc&sort=rank&site=stackoverflow");
var res = client.GetAsync(client.BaseAddress).Result;
Console.WriteLine(res);
}
任何人都可以告诉我是否想要使用此API从堆栈溢出中获取所有徽章,我需要做什么。我真的不理解我在我的Cmd prmt上获得的结果格式!
控制台上的输出:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Credentials: false
X-Content-Type-Options: nosniff
Cache-Control: private
Date: Thu, 28 Dec 2017 09:49:33 GMT
Content-Length: 880
Content-Encoding: gzip
Content-Type: application/json; charset=utf-8
}
答案 0 :(得分:4)
您正在查询API的文档,并且您最有可能获得页面标记。
您应该查询:https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow
上述API方法中输出的格式为 JSON 。
输出中很少有注意事项:
要更改页面,请将&page=
参数附加到网址。
所以你对第2页的查询看起来像这样:
https://api.stackexchange.com/2.2/badges?page=2&order=desc&sort=rank&site=stackoverflow
编辑:
正如我所说,我链接的API是正确的,您的问题是您尝试从API显示响应内容的方式。
.Result
不是您认为的那样。 .Result
返回Task<TResult>
,这不是API的响应,而是请求的结果。这就是为什么你有请求,响应类型等的状态代码。
以下是检索响应文本的方法。这是一个示例,如果要访问响应对象的不同属性,则需要自己进行处理。这是一个单独的问题,但它超出了这一范围。
var response = client.GetAsync("https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow").Result;
string res = "";
using (HttpContent content = response.Content)
{
Task<string> result = content.ReadAsStringAsync();
res = result.Result;
}