看似简单的调控制器或API传参,踩过的坑也不少,随手记一下:
1、当用POST时,方法名不能以Get开头,这个坑死人不偿命啊,一开始抓瞎了,各种排查,后来发现这规律,网上也有解释。就是命名以Get开头的方法就会强制认为是GET方法,哪怕写了[HTTPPOST]也没用。但方法名不以GET开头真的不习惯啊。。。GETXXList多明确,只能改成QueryXXList之类的了
2、POST数组不会直接对应成List<T>类型,到少MVC4是不行,据说MVC5还是6能支持,但旧项目是不行,不是JS循环拼下数组传到后台就能自动识别到List的,目前做法都是JSON.StringIfy转成字符串,后台用JsonConvert反解析成集合。
3、API如果是GET方法,用实体接收参数,要用[FromURI]才行。如果是POST,要用[FromBody]
4、今天更是碰到一个奇葩的特性,MVC用实体接收时,变量名不能和实体里元素重名。。。
比如 public ActionResult TestMethod(TestModel aa),如果TestModel里有个 string aa {get; set;},那这个TestModel实体就会接收成null。。。排查了半天
5、一个接口文档里,要求API控制器方法名带 - 这个符号,可能是JAVA可以?.net直接是不行,折腾了半天用上HttpRoute("xx-xx/xx")才可以,默认是不行,直接报错。
6、一个接口要求把数据在Body里POST,直接用公司封装的POST也不行,用WebClient、HttpRequest什么的都不行,最后装了RestSharp,把 {xx:xx} 这样的参数字符串放在body里才可以,对应的PostMan里Raw标签栏那样用法
7、POST支持同时传两类参数,一类放在URL上(即QueryParam),一类放在body里,有个小项目就是同时传了这两种类型的参数才可以(好像是Body强制被用成固定的东西了,想要另外传参只能在URL里)