webapi的那些事

最近在用webapi的时候,通过单元测试调试webapi后发现不少问题,现做以下汇总和解决方案分享:

1.webapi有4种资源调度方式分别对应着数据库的CURD,自动匹配所有的GetXXX或者PostXXX的函数

webapi调度         数据库操作

   GetAsync--------->select

   PostAsync-------->Insert

   PutAsync---------->Update

   DeleteAsync------->Delete

说下post和put区别吧:项目中用post和put方式调度,其实都能实现同样的功能,但是put后返回的结果是单条的,而post返回的结果是多条的,结合到数据库的执行update和add后

返回的受影响行数,应该就很容易理解了吧;

2.如果创建人的api项目是2.0的话,默认自带的一些高版本的dll版本(系列化等)会引发程序在Gload.cs的异常,版本匹配不上,

这个不多说,本人已遇到,解决方式就是更换低版本的dll引用,dll文件统一管理咯;

3.大家在做post提交请求的时候,遇到需要传参的时候,参数较多会封装成实体,那么参数较少的情况可能就会挨个传参(不走url),看似没有问题,建立连接后会出现未将对象引用问题,

经调试发现虽然api通道能走通,但是参数获取未nul,检查地址发现没问题后还是获取null,取网上找了下,发现官方建议在传参时在前面打上【Frombody】标记就可以了,这样就会告诉

api要从请求体重获取data数据(只能存在一个【Frombody】),加上后就可以继续玩耍了-。-;

Ps:[Frombody]如果按照键值的形式传参会获取不到值,所以清空data数据中的键只传value就可以啦(具体为什么还没想清楚,有了解的童鞋望告知*.*);

4.项目中post基本上可以代替增删改操作了,默认访问Put、Delete调度会出现状态值为405的异常,如果需要用到PutAsync、DeleteAsync的童鞋需要在配置文件中加上这一段:

<system.webServer> 
  <modules> 
    <remove name="WebDAVModule" /> 
  </modules> 
  <handlers> 
    <remove name="WebDAV" /> 
  </handlers> 
</system.webServer>

或者移除IIS中的WebDAV Publishing服务即可。


如有不对或缺少,请补充! 

你可能感兴趣的:(webapi的那些事)