与获取服务电话

时间:2017-12-28 08:49:27

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

我刚创建了一个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
}

1 个答案:

答案 0 :(得分:4)

您正在查询API的文档,并且您最有可能获得页面标记。

您应该查询:https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow

上述API方法中输出的格式为 JSON

输出中很少有注意事项:

  • quota_max - 告诉您一天内可以提出多少请求。
  • quota_remaining - 今天您可以提出多少请求。
  • has_more - 如果有另一个带徽章的页面。

要更改页面,请将&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;
}