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

本文关键字:POST 请求 GET httpclient PostAsJson 发送 | 更新日期: 2023-09-27 18:32:33

我正在使用HttpClient发出发布请求。我得到405方法不允许。在小提琴手中捕获痕迹时,它会以 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(如预期的那样)。手动将其切换到开机自检并从小提琴手运行工作。

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

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

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

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

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

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

在我的情况下(golang 服务器),请求在 URI 中有双斜杠,并且 golang 服务器正在重定向到 URI 的单斜杠版本。令人费解的是,HttpClient在重定向的 URI 上使用GET而不是原始POST

例如,我错误地请求https://example.com//foo服务器将我重定向到https://example.com/foo