React Native中带参数的Fetch POST请求返回400状态码如何解决?
代码存在的核心问题
- 请求头和body格式不匹配,这是触发400状态码的直接原因
你在headers中声明了Content-Type: application/x-www-form-urlencoded(表单格式),但实际提交的body是经过JSON.stringify序列化的JSON字符串,两种格式完全不兼容,后端无法正常解析请求参数,直接返回400错误。 - Promise链返回值缺失
第一个then回调中没有返回response.json()的执行结果,会导致第二个then接收到的data为undefined,无法正常获取接口返回数据。
修正方案
将body的JSON序列化逻辑替换为符合x-www-form-urlencoded格式的序列化逻辑,同时补全Promise返回即可:
function sendRequest2() { // 构造标准表单格式参数 const params = new URLSearchParams(); params.append("code", "value1"); params.append("client_id", "value2"); params.append("client_secret", "value3"); params.append("redirect_uri", "http://www.google.com"); params.append("grant_type", "authorization_code"); fetch(`https://sandbox-api.dexcom.com/v2/oauth2/token`, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: params, // fetch会自动适配URLSearchParams实例的格式 }) .then((response) => { return response.json(); // 补全返回值 }) .then((data) => { console.log(data); }) .catch((err) => console.log("The error is: " + err)); }
如果你的运行环境不支持URLSearchParams,也可以手动拼接编码后的表单字符串:
body: "code=value1&client_id=value2&client_secret=value3&redirect_uri=http%3A%2F%2Fwww.google.com&grant_type=authorization_code"
手动拼接时需要对参数值做URL编码,避免特殊字符导致后端解析错误。
内容的提问来源于stack exchange,提问作者Santam
相关产品推荐
相关产品推荐

