使用DefaultModelBinder
而不是x-www-form-urlencoded
对数据进行POST时,有没有办法让application/json
正常工作,但该值的实际有效负载是否为JSON编码?
例如,我正被发送一个键值对:
key: 'events'
value: '[{"event":"inbound","ts":1350928095,"msg":{"raw_msg":"Received"}}]'
在这种情况下,值包含JSON数组。
注意:POST来自第三方,因此我无法控制它。
答案 0 :(得分:0)
一般来说,答案是“当然。只需使用'NAME = VALUE'(例如'data = MYJSON'),并且在发送之前不要忘记编码。”
以下是一个例子:
但是,重新阅读你的问题,你正在使用MVC4。这可能会对简单的C#或Java程序施加限制:(
答案 1 :(得分:0)
我不这么认为。您可以将客户端更改为发布应用程序/ json内容类型,也可以编写自定义模型绑定器。
答案 2 :(得分:0)
如果您在单个操作中需要此行为,请使用JavaScriptSerializer
将JSON内容反序列化为集合,并使用UpdateModel
/ TryUpdateModel
验证集合方法
如果您需要许多操作,那么您必须通过继承DefaultModelBinder
并覆盖CreateModel
方法来获取自定义模型绑定器。在CreateModel
方法中,使用JavaScriptSerializer
从POSTed值创建对象。
public class CustomModelBinder: DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// return serializer.DeserializeObject(read the value from request);
}
}
现在,您可以使用CustomModelBinder
属性跨行动重复使用Bind
。