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 @   Sicket  阅读(4774)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示