【发布时间】:2020-06-26 01:15:40
【问题描述】:
我真的不确定发生了什么。
我正在使用 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的base uri。
我可以在 Postman 中执行相同的请求,并且效果很好。
问题是,由于某种原因,httpclient 实际上执行的是 GET 请求而不是 POST,并且忽略了任何内容:
我在 Postman 中检查过,这似乎是服务器对 GET 请求的正常响应。
我也试过
using var response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, string.Empty){Content = content});
...它给出了相同的结果。
这对我来说似乎是一个非常奇怪的问题,因为我过去从未见过 http 客户端有这样的行为。谁能解释一下为什么会这样?谢谢!
【问题讨论】:
-
那么,你发送的是空内容,还是认证失败导致重定向后返回的HttpResponseMessage?
-
@Jimi 我传递给 PostAsync 的内容不为空,它有 220 字节的数据和标头。在我从收到的响应中查看请求消息后,内容为空,因为 GET 不能有内容。服务器响应任何 GET 都会放弃 400,所以我认为这不是身份验证问题。
-
@Jimi 是的,你是对的。服务器实际上将我重定向到同一页面,但这次使用 GET 请求。我不知道为什么会发生这种情况,或者为什么邮递员可以正常工作(我复制了所有标题)。谢谢,您可以发布答案,以便我验证
-
嗯,我很高兴它有助于缩小问题范围(当然这种重定向将方法设置为
GET),但我的评论并没有解决问题。当您首先确定导致问题的原因后,您应该(IMO)自己发布答案,否则只是单词。
标签: c# .net http httpclient