RC版WebApi参数绑定

之前看了http://www.cnblogs.com/dudu/archive/2012/05/11/asp_net_webapi_httpclient.html写的httpclient+webapi的一个例子,参考他的代码子阶写了一个,结果请求服务获取的参数都是空的,而将参数绑定在url中则可以正常得到参数,折腾好久,终于在网上找到了相关资料,原来RC版WebApi在参数绑定上发生了些变化。

rc版的webapi参数绑定器分为两种:

1.Model Binding

2.Formatters

其中Model Binding仅从url中取值,这点是与mvc的model binding有区别的,

formatters是从request的body中取值,并且是把整个body作为一个(不可为多个)对象解析为一个参数。

 

/?id=123&name=bob   void Action(int id, string name) // 两个参数都是基本类型,则从url中获取

/?id=123&name=bob   void Action([FromUri] int id, [FromUri] string name) // 标记为FromUri的参数从url中获取.

void Action([FromBody] string name); // 标记为FromBody的参数从request的body中取值.

public class Customer {   
// a complex object     
public string Name { get; set; }     
public int Age { get; set; }   
}

 

/?id=123   void Action(int id, Customer c) // id 从url获取, c 是一个自定义类型,从request的body中取值.

void Action(Customer c1, Customer c2) // 这样的写法是错误的,从request的body中取值的参数只能有一个

void Action([FromUri] Customer c1, Customer c2) // 这样是正确的, c1 从url获取 、 c2 从request的body中取值

void Action([ModelBinder(MyCustomBinder)] SomeType c) //指定一个明确的模型绑定器使用来创建参数.

// 位置属性类型声明应用于所有的参数实例
[ModelBinder(MyCustomBinder)] 
public class SomeType { } 

 

void Action(SomeType c) // c的类型指定使用model binding.

到此,已经明白为什么RC版下服务获取参数为空了,也知道如何处理了。

http://www.cnblogs.com/sicket/articles/2567129.html

posted @ 2012-06-28 09:45  Sicket  阅读(4755)  评论(0编辑  收藏  举报