c#httpclient PostAsJson发送GET请求而不是POST

Jas*_*yne 5 c# json http httpclient dotnet-httpclient

我正在使用HttpClient发布帖子请求.我不回来405方法.在fiddler中捕获跟踪时,它会以GET而不是POST的形式出现!

using (var client = new HttpClient())
            {
                var url = AppSettingsUtil.GetString("url");
                var response = client.PostAsJsonAsync(url, transaction).Result;
            }
Run Code Online (Sandbox Code Playgroud)

我知道异步/等待问题.这是一个简化的示例来说明问题.

是否存在可能影响此问题的某种web.config或machine.config设置?其他请求(通过RestSharp发送)正确发送帖子

这是小提琴手捕获的内容.在fiddler中重新运行跟踪也会返回405(如预期的那样).手动将其切换到POST并从fiddler运行.

另外,也许是因为该方法被切换到GET,在fiddler中没有捕获到的身体,我不得不手动粘贴在JSON中

GET /*URL*/ HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: /*host*/
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

Jas*_*yne 8

问题似乎是有人在没有告诉我们的情况下更改了 URL,并且他们设置了重定向。HttpClient 正在响应重定向,但最终实际上将请求作为 Get 发送到最终目的地。

对我来说,这似乎是 HttpClient 中的一个错误,它应该将最终请求作为 Post 发送,或者抛出一个异常,说它不能按照我的要求执行。

请参阅使用 JAX-RS 转发来自另一台服务器的响应

  • 我刚刚遇到了 @Brad Moore 提到的同样的问题。在 Azure 中,我们启用了一项安全设置,要求所有 URL 调用都使用 https://。其中一个旧调用仍在对 http:// 端点执行 POST 操作,并记录了“不允许的方法”错误,指出该调用是具有误导性的 GET。 (3认同)
  • 原来这也是我的问题。重新编写旧应用程序仍然会转到 http:// 服务器,即使新服务器是 https:// 服务器,重定向导致非安全连接重定向到安全站点。 (2认同)