【问题标题】:Related to Get service call与获取服务电话相关
【发布时间】:2018-06-08 19:36:28
【问题描述】:

我刚刚创建了一个 HTTP 获取请求,以从我的控制台应用程序的堆栈溢出中获取内容(所有徽章),如下所示

  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
}

【问题讨论】:

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


    【解决方案1】:

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

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

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

    输出中需要注意的几点:

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

    要更改页面,请将&page= 参数附加到 url。

    所以您对第 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;
    }
    

    【讨论】:

    • 我按照你说的尝试了仍然得到相同的输出。我只需要获取批次名称。
    • @SandeepPandey 您正在访问错误的调用结果。你访问的不是你想要的。阅读您正在调用的文档。例如,请参阅我的编辑。
    • 但我只是调用 getStackBadges() 方法并尝试了两个 URls,仍然遇到同样的问题
    • @SandeepPandey 就像我上面说的。您正在访问您想要的错误属性。再次查看我的答案,在底部我已经向您解释了您做错了什么,如果您没有获得所需的输出,还请阅读您正在访问的文档,它会解释原因。
    • 最重要的是为什么需要使用任务和异步。我希望它是同步呼叫
    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多