【问题标题】:c# httpclient PostAsJson sending GET request instead of POSTc#httpclient PostAsJson 发送 GET 请求而不是 POST
【发布时间】:2016-01-29 22:00:31
【问题描述】:

我正在使用 HttpClient 进行发布请求。我返回不允许的 405 方法。在 fiddler 中捕获跟踪时,它会以 GET 而不是 POST 的形式输出!

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

我知道异步/等待问题。这是显示问题的简化示例。

是否有某种 web.config 或 machine.config 设置可能会影响这一点?其他请求(通过 RestSharp 发送)正确发送帖子

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

另外,可能是因为方法切换到了GET,fiddler中没有捕获到body,我不得不手动粘贴到JSON中

GET /*URL*/ HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: /*host*/
Connection: Keep-Alive

【问题讨论】:

  • 可能是一个错误,每个线程stackoverflow.com/questions/7105096/…
  • 当我的网址不是以 / 结尾时,我收到了这个
  • 我的 URL 不是以 / 结尾的,我也是这种情况@PiotrPerak

标签: c# json http httpclient dotnet-httpclient


【解决方案1】:

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

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

Forwarding a response from another server using JAX-RS

【讨论】:

  • 是的,可能是一个错误stackoverflow.com/questions/7105096/… 如果收到 302 状态代码以响应 GET 或 HEAD 以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件。
  • 原来这也是我的问题。即使新服务器是 https:// 并且重定向导致非安全连接重定向到安全站点,重写旧应用程序仍会转到 http:// 服务器。
  • 我刚刚遇到了@Brad Moore 提到的相同问题。在 Azure 中,我们启用了要求所有 URL 调用都使用 https:// 的安全设置。其中一个旧调用仍在对 http:// 端点执行 POST 并记录“不允许的方法”错误,指出该调用是具有误导性的 GET。
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2015-08-06
  • 2021-10-12
  • 2012-05-06
相关资源
最近更新 更多