.net core 中的[FromBody]

针对.net core中post类型的api注意的地方

1、如果客户端Content-Type是application/json,api接口如果是用单个对象做参数的时候,加或者不加[FromBody]都可以正常解析参数,但是接口是用对象列表做参数时候,则必须加[FromBody],否则读取不到参数。

2、如果客户端Content-Type不是application/json,api接口必须加[FromForm],否则客户端调用接口会报400错误。

写两段测试代码

     [HttpPost("PostList")]
        public void PostList([FromBody]List<Person> person)
        {
            List<Person> personObj = person;
        }


        [HttpPost("PostSingle")]
        public void PostSingle(Person person)
        {
            Person personObj = person;
        }

先测试提交单个对象,如果选择文本方式提交json个数据,直接抛出400错误。

接着Content-Type改成application/json,可以看到提交成功了。

断点到代码,数据读取正常。

接着我们加上[FromBody]试下

 可以看到同样有数据,说明post单个对象的json数据时候,加不加[FromBody]都可以正常读取参数。

接着我们来看下列表内容的json是否有区别。

同样,当我们设置Content-Type如果不为application/json时,提交是进不了接口,客户端报400错误。

首先看加[FromBody]

 结果显然是正确的!

再看不[FromBody]

客户端可以提交数据,返回200,但是接口中获取的数据却为空了!说明读取列表时候必须加[FromBody]

综合上述,客户端如果是提交json数据时候建议都加上[FromBody]。

如果客户端提交的数据Content-Type如果不为application/json时,会报错,如果要解决报错,需要在接口上加上[FromForm]。

猜你喜欢

转载自www.cnblogs.com/KQNLL/p/10322143.html