通过接口提交数据,Content-Type应该是application/x-www-form-urlencoded还是application/json?

89 篇文章 9 订阅
11 篇文章 0 订阅

通过POST方式提交数据到接口的时候,常常会遇到这种句子:

webClient.Headers.Add("Content-Type", "application/json");

或者

webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

那究竟应该用哪种方式?

答案是跟我们提交的参数格式有关。

如果是通过页面表单方式提交,那就是"application/x-www-form-urlencoded";如果是json(要反序列化成字符串),那就是"application/json"

对于"application/x-www-form-urlencoded",其参数组织形式,是键值对,类似于get方式的参数形式:name=张三&sex=男&tel=5354169,而json大家都知道,是这样的:

{
	name:"张三",
	sex:"男",
	tel:"5354169",
}

所以,如果你传递的参数是json,而你声明的header是"application/x-www-form-urlencoded",或者没有声明这个"Content-Type"(似乎默认就是"application/x-www-form-urlencoded"),则服务器拿不到提交的数据。数据是传过去了,但读不出来。

反之应该也一样。


2018.7.20
另外,如果提交的数据中含有汉字,编码跟服务器不同的话,也有可能导致服务器接收不到提交的数据。


2019.06.20
采用哪种格式,可能也跟服务器端有关。今天就遇到一种情况,用JSON不行,非要用键值对提交。用JSON的话,对方返回一个错误:

无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接

改用"application/x-www-form-urlencoded"则正常。按道理,两种都应该可以,我们之前已经试过很多次了。

类似代码:

        string postData = "value=a";
        byte[] bytes = Encoding.UTF8.GetBytes(postData);
        WebClient client = new WebClient();
        client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        client.Headers.Add("ContentLength", postData.Length.ToString());
        Encoding enc = Encoding.GetEncoding("UTF-8");
        byte[] responseData = client.UploadData("http://localhost:28450/api/values", "POST", bytes);
        string re = enc.GetString(responseData);
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值