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

时间:2020-06-25 16:03:31

标签: c# .net http httpclient

我真的不确定发生了什么。
我正在使用HttpClient使用PostAsync这样的方法将XML内容发布到远程服务器:

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

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

我可以在邮递员中执行相同的请求,并且效果很好。
问题是,出于某种原因,httpclient实际上执行了GET请求而不是POST,并且忽略了任何内容:

screenshot

我已经签到Postman,看来这是服务器对GET请求的正常响应。

我也尝试过

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

...并且给出相同的结果。

这对我来说似乎是一个很奇怪的问题,因为我以前从未见过HTTP客户端的行为。谁能解释为什么会这样?谢谢!

1 个答案:

答案 0 :(得分:0)

好的,所以问题出在服务器上。

它将所有不以“ /”结尾的URL(例如http://address.com/page)重定向到相同的地址,但以“ /”结尾的请求-http://address.com/page/,并丢失了正在处理的方法和内容。 / p>

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