我遇到了使用 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 捕获数据包,跟踪结果如下:
我没有得到正确的回应。
当我使用 curl 命令行
curl -X POST http://x.x.x.x/api -H "Content-Type: application/x-www-form-urlencoded" -d "*IDN?"
结果是
我得到了正确的回应。
显然请求和响应的顺序颠倒了。为什么?以及如何解决这个问题?