asp.net web api 的输入输出

本文详细介绍了WebAPI的内容协商规则及序列化流程,探讨了参数绑定机制与返回值类型的处理方式,并提供了单元测试技巧。

web api 序列化规则

web api使用内容协商的规则来解和序列化输,根据请求的accept来选择不同的mediaformatter,支持自定义formatter来解析自定义类型。框架预先定义三种formatter可供选择,xml、json、BSON(二进制的json),在formatter上可以定义不同的校验规则,详情见

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/ 

web api 输入参数绑定

默认的对于值类型的参数,web api会从URI里解析参数,如果是复杂类型参数,会试图从body中取

可以使用[FromUri]和【FromBody】来改变默认的参数位置,由于body没有放缓存里,body里的内容只能取一次,所以不能有多个FromBody参数

FromBody和FromUri只是两个特殊的ModelBindler,我们可以自定义ModelBindler,自己从request里取数据映射到参数上。

详情见https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

web api 返回值类型

web api  的返回值有如下4种,空,IHttpActionResult,HttpResoponseMessage,其他,对于这4中,web api的处理为,空,转换为204,HttpResoponseMessage直接返回,IHttpActionResult实质为HttpResponseMessage的工厂类,执行接口ExcuteAsync获取HttpResoponseMessage对象返回,其他对象类型,返回序列化并返回200

框架自带的IHttpActionResult类型有:OK,NotFound

如果希望对返回值有更多的控制,则使用原始的HttpResoponseMessage对象,如设置返回值的header

使用IHttpActionResult可以大大简化unit test,详情见 

https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api 和 https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api

参考链接

https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/ 

https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值