日期:2014-05-17  浏览次数:20582 次

人为设置让web api参数反序列化为json
webapi的参数反序列化是根据HTTP请求中的Content-type
现在有这样一个场景
在发起HTTP请求都时候,ContentType不填或者随意填,Action内接收的参数按照json格式反序列化

思路1.
通过某种方式在参数序列化之前改变HTTP请求的ContentType,或者让web api进行参数反序列化的时候读取的ContentType为我们想要的值。
比如在请求的时候填写Content-Type:text/plain
然后经过某种处理,在webapi进行反序列化的时候他读到的Content-Type:application/json。
然后他按照json格式去处理

思路2.
设定类似于Content-Type填写application/json映射参数使用json反序列化这样的映射,比如我在url中写type=json,即可映射为使用json格式反序列化参数。
通过以下这种方式似乎是配置返回值的序列化方式的,并不影响接收参数的反序列化。

QueryStringMapping jsonMapping = new QueryStringMapping("type", "json", "application/json");
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(jsonMapping);


这两种哪一种可以行得通呢,或者有更好的解决办法解决这个问题。
求解惑。

上个帖子中有朋友提到在filter判定,但是并不好使。。因为使用actionContext.ActionArguments;都可以获取到反序列化的参数了-  - 再去设置headers也无甚意义吧。

------解决方案--------------------
为啥不用RequestHeaderMapping呢
------解决方案--------------------
而且MediaTypeMapping还是个抽象类,可以自己实现匹配关系..
------解决方案--------------------
啥也别说了,直接上官方的说明

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization