首页 > 解决方案 > HttpClient.PostAsJsonAsync 无一例外地被粉碎

问题描述

我正在尝试使用 HttpClient.PostAsJsonAsync 调用 api(POST 方法)。但是,它毫无例外地停在了 httpClient.PostAsJsonAsync 处。

源代码如下:

public static async Task<oResult> PostApi(string JSON_sObject, string sEnd_Url) {
        oResult oResult = new oResult();
        var Data = JsonConvert.DeserializeObject(JSON_sObject);
        var Url = "http://localhost:44340/" + sEnd_Url;

        HttpClient httpClient = new HttpClient();
        try {
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await httpClient.PostAsJsonAsync(new Uri(Url), Data); // it stopped here 
            if (response.IsSuccessStatusCode)
            {
                var sResponse_content = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<oResult>(sResponse_content);
            }
            else
            {
                return oResult;
            }
        }
        catch (Exception ex)
        {
            LogFile(ex);
            return oResult;
        }
    }

如果源代码有任何问题,请告诉我。

谢谢

标签: c#httpclient

解决方案


你不应该尝试序列化反序列化两次

从您的代码中删除

 var Data = JsonConvert.DeserializeObject(JSON_sObject);

并更换

HttpResponseMessage response = await httpClient.PostAsJsonAsync(new Uri(Url), Data); 

有了这个

var content = new StringContent(JSON_sObject, Encoding.UTF8, "application/json");
var response = await client.PostAsync(sEnd_Url, content);

还修复了基本的httpclient地址

     var baseUri= @"http://localhost:44340";
    using HttpClient client = new HttpClient { BaseAddress = new Uri(baseUri) };
  try {

推荐阅读