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

.NET Core 3.1 HttpClient调用POST接口返回Bad Request但Postman正常

问题

我有一个客户提供的POST类型API端点,使用Postman可以正常调用并获取响应。

Postman的可用设置如下:

URL: 
https://somedomain.com/rest/portal/authenticate 

Headers:
"Content-Type":"application/x-www-form-urlencoded"
"Referrer": "10.xx.xx.xx"   // 此处为真实IP地址

Body: (x-www-form-urlencoded)
"username": "TestAdmin"
"password": "testpassword"

该设置可正常运行,我能在Postman中收到响应。

现在在同一台笔记本上,我尝试用.NET Core 3.1的方法发起POST请求,代码如下:

string userName = _config.GetSection("username").Value;
string Password = _config.GetSection("password").Value;
string BaseURL = _config.GetSection("baseURL").Value;  // https://somedomain.com/rest

var dict = new Dictionary<string, string>();
dict.Add("username", userName);
dict.Add("password", Password);
            
var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, BaseURL + $"/portal/authenticate")
          { Content = new FormUrlEncodedContent(dict) };
                          
req.Headers.Add("Referer", "10.xx.xx.xx"); // 此处填入真实IP地址

var response = client.SendAsync(req).Result;
string responseContent = response.Content.ReadAsStringAsync().Result;

但这种方式会返回Bad Request错误,附带“无效用户(Invalid user)”提示。

请问我哪里操作有误?我构建的请求是否与Postman中的请求不一致?

解决方案
  • 校验配置项读取结果:确认_config.GetSection("username")和_config.GetSection("password")确实读取到了TestAdmin和testpassword,排查配置文件键名拼写错误、值为空或不匹配的情况,这是导致“无效用户”提示的常见原因。
  • 修正Header名称:Postman中使用的Header是Referrer,但代码里写的是Referer(少一个字母r),部分服务器会严格校验Header名称,将代码中的req.Headers.Add("Referer", "...")改为req.Headers.Add("Referrer", "...")后重试。
  • 规范URL拼接方式:避免手动拼接URL时出现重复斜杠的问题,比如BaseURL末尾带/的话,拼接后会变成rest//portal/authenticate,改用new Uri(new Uri(BaseURL), "/portal/authenticate")生成请求URL,确保地址格式正确。
  • 对比请求报文差异:用Fiddler抓包对比Postman和代码发起的请求,或者使用Postman的“生成代码”功能导出.NET Core格式的请求代码,和自己的代码做逐行对比,排查Header、Body、URL等细节的不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:45:44