3

DefaultModelBinder当使用x-www-form-urlencoded而不是POST 数据时,有没有办法让POST 工作application/json,但值的实际有效负载是 JSON 编码的?

例如,我收到一个键值对:

key: 'events' 
value: '[{"event":"inbound","ts":1350928095,"msg":{"raw_msg":"Received"}}]'

在这种情况下,该值包含 JSON 数组。

注意:POST 来自第 3 方,因此我无法控制它。

4

3 回答 3

0

如果您在单个操作中需要此行为,请使用JavaScriptSerializer将 JSON 内容反序列化为集合并使用UpdateModel/TryUpdateModel方法验证集合。

如果您需要许多操作,那么您必须通过继承DefaultModelBinder并覆盖该CreateModel方法来使用自定义模型绑定器。在该CreateModel方法中,使用JavaScriptSerializerPOST 值创建对象。

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

于 2012-10-25T16:35:30.430 回答
0

一般来说,答案是“当然。只需使用'NAME=VALUE'(例如'data=MYJSON'),并且不要忘记在发送之前进行编码。”

这是一个例子:

但是,重新阅读您的问题,您正在使用 MVC4。这可能会对简单的 C# 或 Java 程序施加限制:(

于 2012-10-25T15:34:27.493 回答
0

我不这么认为。您可以更改客户端以发布应用程序/json 内容类型或编写自定义模型绑定器。

于 2012-10-25T15:36:02.247 回答