httpClient.PostAsync() 仍然执行 GET 请求

httpClient.PostAsync() performs GET request anyway

我真的不知道发生了什么。
我正在使用 HttpClient post XML 内容到远程服务器,使用 PostAsync 方法,如下所示:

using var content = new StringContent(payload, Encoding.UTF8, "application/xml");
using var response = await _httpClient.PostAsync(string.Empty, content);

... 其中payload是一个字符串,相对uri为空,因为我只需要调用httpclient的base uri。

我可以在 Postman 中执行相同的请求并且它工作正常。
问题是,出于某种原因,httpclient 实际上执行了 GET 请求而不是 POST,并且忽略了任何内容:

我查过Postman,好像是服务器对GET请求的正常响应。

我也试过了

using var response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, string.Empty){Content = content});

...它给出了相同的结果。

这对我来说是一个非常奇怪的问题,因为我过去从未见过这样的 http 客户端。谁能解释为什么会这样?谢谢!

好的,问题实际上出在服务器上。

将所有URL不以“/”结尾的请求,如http://address.com/page重定向到同一个地址,但以“/”结尾-http://address.com/page/,并在处理过程中丢失了方法和内容.

正如@Jimi 提到的,HttpResponseMessage 中的 RequestMessage 字段包含有关到达服务器的最后一个请求的信息,因此初始请求数据丢失,我误以为 HttpClient 发出了错误的请求。