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里取数据映射到参数上。
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/formats-and-model-binding/