C# HttpClient post 请求落后于服务器的响应

问题描述 投票:0回答:1

我遇到了使用 C# 的 HttpClient 向 Web api 发出 post 请求的问题。我的代码如下:

using(HttpClient client = new HttpClient())
{
    client.BaseAddress = new Uri("http://x.x.x.x/");
    var content = new StringContent("*IDN?", Encoding.UTF8, "application/x-www-form-urlencoded");
    var response = client.PostAsync("api", content).GetAwaiter().GetResult();
    if (response.IsSuccessStatusCode)
    {
        var res = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
        Console.WriteLine($"res = {res}");
    }
    else
    {
        Console.WriteLine("Error: " + response.StatusCode);
    }
}

我使用 Wireshark 捕获数据包,跟踪结果如下:

enter image description here

enter image description here

我没有得到正确的回应。

当我使用 curl 命令行

curl -X POST http://x.x.x.x/api -H "Content-Type: application/x-www-form-urlencoded" -d "*IDN?"

结果是

enter image description here

我得到了正确的回应。

This is the frame of curl cmd capture by wireshark

显然请求和响应的顺序颠倒了。为什么?以及如何解决这个问题?

c# post dotnet-httpclient
1个回答
0
投票

我找到了解决这个问题的方法。 本页 & 本页可以解释这种现象。我使用 .net472 和 HttpCliet.Post 发送两个数据包,一个用于标头,另一个用于正文。但不知何故,目标机器无法正确处理单独的邮政数据包。当它收到第一个数据包时,它会做出响应,并且不会按预期执行发布的数据。我无法更改 .net 版本,因此我通过平台调用另一个 dll(如 wininet.dll.

)解决了这个问题
© www.soinside.com 2019 - 2024. All rights reserved.