【问题标题】:Unable to print JSON response with C# getAsync url call无法使用 C# getAsync url 调用打印 JSON 响应
【发布时间】:2019-11-21 14:28:45
【问题描述】:
using System;
using System.Net.Http;

namespace ConsoleAppRest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            string url = "http://jsonplaceholder.typicode.com/posts/1/comments";

            GetRequest(url);
        }

        async static void GetRequest(string urlstr)
        {


            using (HttpClient client = new HttpClient())
            {
                using (HttpResponseMessage response = await client.GetAsync(urlstr))
                {
                   using (HttpContent content = response.Content)
                    {
                        string mycontent = await content.ReadAsStringAsync();
                        Console.WriteLine(mycontent);

                    }

                }
            }

        }

    }
}

我正在使用上面的代码,但是当我执行时,我在控制台上没有得到任何东西。

要在调试停止时自动关闭控制台,启用工具->选项- 调试->调试停止时自动关闭控制台。 按任意键关闭此窗口。 . .

我应该得到如下 json 格式的响应(在浏览器中也是相同的结果)

[
 {
"postId": 1,
"id": 1,
"name": "id labore ex et quam laborum",
"email": "Eliseo@gardner.biz",
"body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium"

  },
  {
"postId": 1,
"id": 2,
"name": "quo vero reiciendis velit similique earum",
"email": "Jayne_Kuhic@sydney.com",
"body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et"
  },
  {
  ..
  }
]

【问题讨论】:

  • 显而易见的答案是因为它没有返回任何东西。调试此问题的第一步是观察网络流量以确认在运行代码时是否实际返回任何内容。
  • 另外,它是一个异步方法,你不需要等待它。所以应用程序在请求返回之前结束。
  • GetRequest 是异步的,所以你需要等待 GetRequest(url);。这将要求您也使 main 方法异步。

标签: c# json rest deserialization


【解决方案1】:

您的代码是异步的,但您从同步方法调用它。您需要在打印之前等待结果,否则您的代码将退出。

var task = GetRequest(url);
task.WaitAndUnwrapException();

在这篇 SO 帖子中了解更多信息: How to call async

你也可以让主方法异步,等待你的调用

await GetRequest(url);

【讨论】:

    【解决方案2】:

    添加 Console.ReadLine(); 后 获取请求(url);

    【讨论】:

    • 问题是 GetRequest 是异步的,而 Main 不是。 ReadLine 可能会起作用,但它并没有解决这段代码中的关键问题。
    • @Sandris Burnovskis 非常感谢。它有效!
    猜你喜欢
    • 2013-06-24
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2015-08-11
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多