当前位置: 首页 > 知识库问答 >
问题:

使http客户端同步:等待响应

花健
2023-03-14

我有一些文件要上传,有些文件失败了,因为帖子是异步的,而不是同步的。

我正在尝试将此调用作为同步调用。

我想等回应。

如何将此调用设为同步调用

static async Task<JObect> Upload(string key, string url, string 
                                 sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                       })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                       "source_file",
                                        new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,
                                                           request).ConfigureAwait(false))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync().ConfigureAwait(false);
            return JsonObject.Parse(data);
        }
    }
}

任何帮助感谢!

共有2个答案

甄煜
2023-03-14

这应该可以做到:

static async Task<JObect> Upload(string key, string url, string 
                             sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                   })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                   "source_file",
                                    new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,request))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync();
            return JsonObject.Parse(data);
        }
    }
}
柳景胜
2023-03-14

改变

await content.ReadAsStringAsync().ConfigureAwait(false)

content.ReadAsStringAsync().Result

ReadAsStringAsync返回一个任务对象。的。行末尾的“Result”告诉编译器返回内部字符串。

 类似资料:
  • 我已经创建了一个简单的Jersey客户端,它能够成功地使用有效负载执行POST请求。但现在它正在等待来自httpendpoint的响应: 问:代码是否有可能不等待响应。 我试图阅读泽西客户端文档,以确定我的代码是否有可能不等待响应?我看到我们只能在读取响应后关闭连接,但在我的情况下没有用。我想在将有效负载发布到endpoint后立即关闭连接。 我只需要触发并忘记POST请求,因为我不关心响应。这是

  • 我正在尝试将我的应用程序从apache http组件客户端切换到异步版本。目标是能够处理更多的出站连接(在不久的将来)。请求的负载非常小( 与同步版本的apache超文本传输协议客户端,通过把大约200请求/秒。平均响应时间约为100ms/请求。我在最大180ms后中止请求。 切换到异步后,响应时间增加了20ms/请求。吞吐量也降低到160/秒。中止的请求数量增加了一倍。 这是在对应用程序进行了很

  • 我正在使用Android异步Http客户端。我的代码看起来像这样,并且运行良好。 我实现了一个静态HTTP客户端。我的服务器返回这个JSON数据。我不想将其视为字符串并将其转换回JSON。但是当我将其更改为eclipse告诉我 new AsyncHttpResponseHandler(){}类型的onSuccess(JSONObject)方法必须重写或实现超类型方法

  • 我正在尝试创建一个基于网络的网络客户端。我根据网络站点中给出的示例编写了代码。但问题是,响应是由客户端处理程序处理的 我做的一件事是在HttpTarget中创建一个setResponse()方法 因此,基本上我想同步进行,即在HttpSnoopClient中发送一个请求(channel.writeandFlush(req)),然后等待,直到HttpSnoopCLientHandler收到响应 谁能

  • 异步Http客户端 Get方式 1.使用域名形式 use AsyncHttp; //直接使用域名, get方式 $http = new AsyncHttp('http://groupco.com'); //设置2s超时 $http->setTimeout(2); //$http->setCookies(['token' => 'xxxx']);

  • 我在使用netty作为http提供者的异步http客户端时遇到了一个奇怪的问题,它是一个调用远程web服务的play应用程序,而我们没有访问权限。还需要注意的是,该服务位于SSL加密的域上,并且只转发到该域,而不转发到IP。堆栈跟踪: 最奇怪的是,这是突然发生的(这是一个客户使用的测试环境),这让我相信接收服务或网络出了问题,但我无法发现哪里出了问题,因为使用curl调用同一个url可以正常工作。