相关疑难解决方法(0)

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

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

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

我想等待回应.

如何将此调用设为同步?

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏!

c# httpresponse dotnet-httpclient

30
推荐指数
2
解决办法
7万
查看次数

使用HttpClient避免死锁

使用HttpClient和避免死锁的最佳方法是什么?我使用下面的代码,完全从同步方法调用,但我担心它可能导致死锁.

我已经做了类似功能的一些阅读.ConfigureAwait(false),.GetAwaiter(),.GetResult()但是我正在寻找的最佳实践方法输入.

代码不太准确,但足够接近.

public static bool TryRequest(string url, out response)
{    
    HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
    using (HttpClient client = new HttpClient())
    {
       HttpResponseMessage responseMessage = null;

       switch (verb)
       {
          case HttpVerb.Put:
             responseMessage = client.PutAsync(url, content).Result;
             break;
          case HttpVerb.Post:
             responseMessage = client.PostAsync(url, content).Result;
             break;
          case HttpVerb.Delete:
             responseMessage = client.DeleteAsync(url).Result;
             break;
          case HttpVerb.Get:
             responseMessage =  client.GetAsync(url).Result;
             break;
       }

       if (responseMessage.IsSuccessStatusCode)
       {
          responseContent = responseMessage.Content.ReadAsStringAsync().Result;
          statusCode = responseMessage.StatusCode;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
2
解决办法
3700
查看次数

标签 统计

c# ×2

dotnet-httpclient ×1

httpresponse ×1