Form Data 和 Request Payload 有什么区别?为什么后台收不到参数报400错误?

引言

请求后台的一个新接口突然报错400 (Bad Request),但在 YAPI 中却可以正常使用,这是因为啥呢?
在这里插入图片描述
经过和其他类似的接口对比发现,问题出现在Content-Type上面,正常的接口是用的application/x-www-form-urlencoded; charset=utf-8",请求体为:Form Data格式;而错误的这个接口用的是application/json;charset=UTF-8,请求体为:Request Payload
在这里插入图片描述

x-www-form-ulencoded和json区别?

要解决这个问题首先要知道这俩啥区别,在搞清楚之前先了解一下Content-Type是什么,都有哪些类型。
Content-Type标头其实就是为了告诉接收双方所携带的数据类型,就和我们电脑中使用的文件后缀一样,这样我们才知道用什么类型打开它。常见的数据类型有:
在这里插入图片描述
最开始的时候是text/plain;charset=UTF-8类型,这种是字符串的形式,里面传啥样都无所谓,如:“Hello World”;后来出现了表单application/x-www-form-urlencoded类型,这种形式主要是以key-value的方式存在,键值对通过&隔开,如:username=admin & password=123456;随着互联网的发展,传统表单已经满足不了需求了,就出现了各种多媒体类型的格式,现在我们用的最多还是JSON格式:application/json,即传输内容均是JSON格式化后的对象,如:{“username”: admin , “password”: 123456}

总结一下

Content-Type为:application/x-www-form-urlencoded 时,浏览器以 FormData 体现
Content-Type为:application/json 时,浏览器以 requestPayload 体现
其实无论使用那种类型,只要前后端都约定好就不会出问题。我这里出问题是因为后台接口使用了form表单的格式接受,要解决这个问题要么把后台的接受格式改为接受JSON对象的格式保持和前端统一,要么前端修改一下Content-Type为form表单的形式。

解决

我这里修改前端代码,将Content-Type自定义为:application/x-www-form-urlencoded
在这里插入图片描述
请求成功,希望对你的问题有所帮助!

猜你喜欢

转载自blog.csdn.net/u012558210/article/details/118353293