You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HttpWebRequest发送POST请求却转为GET,请求协助排查

解决POST请求被转为GET的问题

先看你代码里的几个关键问题,这些都可能导致服务器无法正确处理你的POST请求,进而出现方法被意外转为GET的情况:

  • 重复且错误的Content-Type头:你既设置了request.ContentType = "application/json";,又通过request.Headers.Add添加了拼写错误的appication/json(少了字母l)。重复的头信息会让服务器困惑,甚至触发错误处理流程,导致请求方法异常变更。
  • 错误的编码格式:你用了UnicodeEncoding来编码JSON数据,但JSON标准要求使用UTF-8编码。UTF-16的编码会让服务器无法正确解析请求体,进而引发异常。
  • 不规范的JSON格式:你的myData里的键名to和body没有用双引号包裹,这不符合JSON语法规范。服务器解析失败后可能返回错误,甚至触发重定向逻辑。

另外,虽然你关闭了自动重定向,但如果服务器在处理错误请求时返回3xx状态码,即使不自动跳转,也可能引发请求方法被转为GET的情况——根源还是请求本身的错误导致服务器异常响应。

下面是修正后的完整代码:

string myURI = "https://api.bulksms.com/v1/messages";
string myUsername = "******";
string myPassword = "******";
// 修正JSON格式,键名添加双引号以符合标准语法
string myData = "{\"to\": \"7777777777\", \"body\":\"Hello Mr. Mbhele!\"}";

HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create(myURI);
request.AllowAutoRedirect = false;
request.MaximumAutomaticRedirections = 0;
request.Credentials = new NetworkCredential(myUsername, myPassword);
request.PreAuthenticate = true;
request.Method = "POST";
// 只设置一次正确的Content-Type头
request.ContentType = "application/json";

// 使用UTF-8编码,匹配JSON标准要求
var encoding = new System.Text.UTF8Encoding();
var encodedData = encoding.GetBytes(myData);

// 使用using语句自动释放流资源,避免泄漏
using (var stream = request.GetRequestStream())
{
    stream.Write(encodedData, 0, encodedData.Length);
}

try
{
    // 用using包裹响应和阅读器,自动释放资源
    using (var response = (HttpWebResponse)request.GetResponse())
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        return reader.ReadToEnd();
    }
}
catch (WebException ex)
{
    Console.WriteLine("An error occurred:" + ex.Message);
    if (ex.Response != null)
    {
        using (var reader = new StreamReader(ex.Response.GetResponseStream()))
        {
            return reader.ReadToEnd();
        }
    }
    // 处理无响应的边界情况
    return null;
}

额外优化说明:

  • 用using语句自动管理流和响应对象的生命周期,避免资源泄漏。
  • 在catch块中增加ex.Response != null的判断,防止空引用异常。
  • 修正了JSON格式,确保符合标准语法要求。

你可以先尝试这些修正,应该能解决请求被转为GET的问题。如果还是有异常,建议在catch块中打印响应的状态码和内容,这能帮你进一步排查服务器返回的具体错误。

内容的提问来源于stack exchange,提问作者LMDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:41:49