HttpClient's PUT同步的行为不同于手动PUT请求(通过PostMan)

本文关键字:PUT 请求 PostMan 通过 不同于 同步 HttpClient | 更新日期: 2023-09-27 18:05:09

我试图创建一个外部API的PUT请求,以整数数组作为请求体。当通过邮差(Chrome扩展)直接发布到外部API时,它工作得很好。下面是请求:

PUT /rest/*****?skipconfig=true HTTP/1.1
Host: ******:****
Authorization: Basic **********
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache
[1214186,1214052,1214333,1213983,1214332,1214332]

然而,当我尝试用。net的HttpClient创建相同的请求时,外部API在大约10秒后抛出服务器错误500,这使我怀疑HttpClient以某种模糊的方式改变了请求,这使得外部API读取请求错误。下面是我的示例代码:

    var json = JsonConvert.SerializeObject(intArray);
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", SvcCredentials);
    var content = new StringContent(json, Encoding.UTF8, MediaTypeHeaderValue.Parse("application/json; charset=utf-8").MediaType); 
    // List data response.
    var uri = new Uri(BaseUrl + "/rest/*****?skipconfig=true", UriKind.Absolute);
    HttpResponseMessage response = await client.PutAsync(uri, content);
    if (response.IsSuccessStatusCode)
    {
        // Parse the response body.
        return response.Content.ReadAsAsync<object>().ToString();
    }
    throw new Exception(response.StatusCode.ToString());

我在这里错过了什么?我尝试用URI对象和url字符串调用PutAsync方法。

HttpClient's PUT同步的行为不同于手动PUT请求(通过PostMan)

好的,我找到了这个问题的原因。

在做了一些研究之后,我能够解密HTTPS请求,使用fiddler中的一个简单选项。

事实证明,StringContent(json, Encoding.UTF8, MediaTypeHeaderValue.Parse("application/json; charset=utf-8").MediaType);在幕后添加了一个"Content-Length"头。这个报头是另一端服务器错误的原因(不要问我为什么)。