转:关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法
2021-03-03 06:28
标签:sage from 编码 post 并且 不同 解决方法 http请求 长度 上图是模拟的一个http请求,中图是服务器端代码,下图是刚刚执行完之后插入到数据库的值, 其中关注点有3处, 1,服务器端代码可以看出是需要传递两个参数的,都是string类型的参数,不同的是一个从url中抽取,另一个从body中抽取,url中已经写入了一个参数,后面没有加&去跟上另一个参数, 2,数据内容其实就是body中要填写的内容,编码形式默认是utf-8,body中上传的内容中,不能是和url中一样的键值对,key=value的形式并不认可,相反,直接从=开始,后面的全部作为一个frombody的sting类型的参数进行传递,如果开头不是=号,那么服务器上的message将会是null空值, 3,数据内容,也就是body内容的长度参数,是必须要有的,在http1.1以上中,如果使用post,并且body中非空时,必须要有content-length的标头,并且,如果字符中存在汉字,那么再utf-8编码模式下,其长度应该采用编码后的字符长度,而不是编码前的长度,也就是byte数组的长度,如果不信可以亲自手写一次进行确认。 当然网上对于frombody参数为空值的情况,有很多人都建议自己做一个读入参数的类去处理,或者将string类型变为object去接收的,然后再抓化成比如json的形式去接收的,但是content-type也要做改变为text/json等,我觉得还是比这种方式要复杂一些,完全不如这种方式来的方便简单。 转:关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法 标签:sage from 编码 post 并且 不同 解决方法 http请求 长度 原文地址:https://www.cnblogs.com/superfeeling/p/12990139.html其实解决办法很简单,就是POST请求的时候,来自实体的参数,content-type:application/x-www-form-urlencoded情况下,是默认按照键值对来解析的,比如paramname=paramvalue的形式,但是这里有个隐形的要求就是frombody的参数只能是一个,如果多个参数被修饰为frombody,编译的时候会报错,也就是意味着,只要是frombody修饰过的参数,其名字并不重要,而再http请求的body部分,直接忽略起参数名,从=开始写参数内容,那么就可以直接被读取为string类型。如果没看懂,请看下面的截图示范:
上一篇:[Win32]事件
文章标题:转:关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法
文章链接:http://soscw.com/index.php/essay/59399.html