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版下服务获取参数为空了,也知道如何处理了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)