首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# HTTP请求在控制台应用程序中有效,但在WinForms中无效

C# HTTP请求在控制台应用程序中有效,但在WinForms中无效
EN

Stack Overflow用户
提问于 2019-05-20 10:33:34
回答 1查看 514关注 0票数 1

最初,我创建了一个控制台应用程序来做一些从服务器获取api调用的测试,并获得了完整的功能和工作。现在,我想要做一个显示,但是来自控制台应用程序的相同代码将不能在winforms应用程序中运行。由于一些断点测试,我发现它在这一行挂起了:

代码语言:javascript
复制
var response = await httpClient.SendAsync(request);

我不明白有什么不同,我已经下载了所有需要的包。我认为这与使用await有关。谢谢你,伊森

以下是不包含私有信息的请求方法代码。我意识到最后有一些不必要的组件,但我只是简单地从我最初的测试控制台应用程序复制和粘贴。所有使用此方法的方法,包括main,都是异步的。

代码语言:javascript
复制
public async Task<string> APICall(string address)
    {

        string error = "An error was encountered.";
        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(new HttpMethod("GET"), address))
            {
                request.Headers.TryAddWithoutValidation("Api-Key", "API KEY");
                httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/hal+json"));

                var response = await httpClient.SendAsync(request);
                if (response.IsSuccessStatusCode)
                {
                    try
                    {
                        Stream res = await response.Content.ReadAsStreamAsync();
                        var serializer = new JsonSerializer();

                        using (var sr = new StreamReader(res))
                        {
                            using (var jsonTextReader = new JsonTextReader(sr))
                            {
                                return await response.Content.ReadAsStringAsync();


                            }

                        }


                    }
                    catch (IOException e)
                    {
                        Console.WriteLine(e);
                    }
                    catch (NullReferenceException e)
                    {
                        Console.WriteLine(e);
                    }
                }

                request.Dispose();
            }
            httpClient.Dispose();
        }
        return error;
    }

这些是调用问题方法的方法,它从Main到startAsync,再到CallAsync,再到APICall,也就是有问题的方法。

代码语言:javascript
复制
        static async Task Main(string[] args)
    {

                    Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Form1 f = new Form1();
        Caller caller = new Caller();
        string test = await caller.CallAsync();
        foreach (KeyValuePair<string, Server> server in Server.servers)
        {
            f.AddRow(server.Value.name, server.Value.location, server.Value.status, server.Value.ticketStatus);
       }
        Application.Run(f);


    }

public static async Task startAsync()
    {
        Caller caller = new Caller();
        string json = await caller.CallAsync();
        Console.WriteLine(json);
        dynamic name = JsonConvert.DeserializeObject<RootObject>(json);
        List<Location> locs = name._embedded.locations;
        int count = 0;
        foreach (Location loc in locs)
        {
            count++;
            Console.WriteLine(count);
            Server.servers.Add(loc.name, new Server(loc.name, loc.address.city, loc.address.state, loc.id, loc.status, await caller.TicketStatusAsync(loc.id)));

        }
    }
        public async Task<string> CallAsync()
    {
        return await APICall(baseAddress);
    }
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56213682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档