WordPress REST API 400错误:Vue请求失败Postman正常
WordPress REST路由Axios请求400错误排查
你的问题核心是:带args验证的REST路由,Postman请求正常,但Vue+Axios请求返回400 Bad Request,注释args后恢复正常。大概率是请求参数的传递格式、参数有效性或WordPress对参数的解析逻辑导致,而非sanitize_callback的语法问题,以下是具体排查方向:
1. 检查Axios的请求参数格式与Content-Type
WordPress REST API默认优先解析form-data或x-www-form-urlencoded格式的POST参数,而Axios默认可能用application/json格式发送请求——如果你的路由没有配置支持JSON body解析,WordPress会无法读取参数,导致必填项arg2被判定为缺失,返回400。
- 验证:打开浏览器开发者工具→Network面板,查看Axios请求的
Content-Type头,以及Payload/Form Data里是否有arg2参数。Postman默认可能用了form-data,所以能被正确解析。 - 修复:
要么修改Axios请求配置,用表单格式发送:
要么在WordPress里添加JSON body解析支持,比如在路由回调前手动解析:const params = new URLSearchParams(); params.append('arg1', 'xxx'); params.append('arg2', 'user@example.com'); axios.post('/wp-json/myPlugin/v1/registration', params, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });function create_new_user($request) { // 手动解析JSON body $params = json_decode(file_get_contents('php://input'), true); // 后续用$params获取arg1/arg2 }
2. 验证sanitize_callback的处理结果
你的arg2用了sanitize_email,如果Axios传递的arg2不是合法邮箱格式,该函数会返回空字符串——而arg2是必填项,WordPress会判定参数无效,返回400。Postman可能传的是合法邮箱,所以能通过验证。
- 调试:在
sanitize_callback里加日志,查看实际接收到的参数和处理结果:
然后查看WordPress的错误日志(wp-content/debug.log,需开启WP_DEBUG),如果'sanitize_callback' => function($param){ error_log('Received arg2: ' . $param); $sanitized = sanitize_email($param); error_log('Sanitized arg2: ' . $sanitized); return $sanitized; }$sanitized为空,说明Axios传的邮箱格式不合法。
3. 确认Axios是否正确传递了必填参数
可能是Axios请求里漏传了arg2,或者参数名拼写错误(比如把arg2写成arg_2),Postman里参数名正确所以没问题。
- 验证:在浏览器Network面板里直接查看请求的参数列表,确认
arg2存在且拼写正确。
4. 临时排除sanitize_callback的影响
把sanitize_callback临时替换为直接返回参数,看是否还返回400:
'arg2' => array( 'required' => true, 'sanitize_callback' => function($param){ return $param; // 跳过邮箱验证 } )
如果此时Axios请求正常,说明问题确实出在sanitize_email的处理上;如果还是报错,说明是参数传递或解析的问题。
内容的提问来源于stack exchange,提问作者newbiedev
相关产品推荐
相关产品推荐

