我真的不确定发生了什么。
我正在使用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,并且忽略了任何内容:
我已经签到Postman,看来这是服务器对GET请求的正常响应。
我也尝试过
using var response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, string.Empty){Content = content});
...并且给出相同的结果。
这对我来说似乎是一个很奇怪的问题,因为我以前从未见过HTTP客户端的行为。谁能解释为什么会这样?谢谢!
答案 0 :(得分:0)
好的,所以问题出在服务器上。
它将所有不以“ /”结尾的URL(例如http://address.com/page
)重定向到相同的地址,但以“ /”结尾的请求-http://address.com/page/
,并丢失了正在处理的方法和内容。 / p>
如@Jimi所述,HttpResponseMessage中的RequestMessage字段包含有关到达服务器的最后一个请求的信息,因此初始请求数据丢失了,我误以为HttpClient发出了错误的请求。