近日将asp.net webapi 升级为rc版,突然发现之前beta版开发的程序不能正常工作了,用httpclient调用webapi时,action的参数总是空,无法获取传入的值,查阅了官方的论坛发现下面的帖子,http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
rc版的webapi参数绑定器分为两种:
1.Model Binding
2.Formatters
其中Model Binding仅从url中取值,这点是与mvc的model binding有区别的,
formatters是从request的body中取值,并且是把整个body作为一个(不可为多个)对象解析为一个参数。
webapi是如何从这两种方式选择呢?
1.默认情况下是根据参数的类型,如果参数为简单类型(字符串、整数、浮点、时间类型等),则使用model binding,如果是复杂类型(自定义的类,包括一个或多个字段)等,则用formatters
2.可以给参数加上[FromBody]属性,则使用formatters
3.可以给参数加上[ModelBinder]属性,则使用model binding,而且可以此属性允许你指定用自定义的绑定器,也可以使用[FromUri]属性来使用model binding
4.特别注意一点,一个action上,只能有一个参数使用formatters,否则会在运行时抛出异常