WebAPI媒体类型格式化程序没有绑定JSON

本文关键字:绑定 JSON 程序 媒体 类型 格式化 WebAPI | 更新日期: 2023-09-27 18:15:19

我很沮丧,我不能弄清楚这一点,考虑到我已经做了一些绑定在过去与MVC2+3我有这样一个方法:

[System.Web.Http.HttpPost]
public ResponseModel Handler([FromBody]RequestModel tableRequest)
{
    return CreateTableResponse(tableRequest);
}

这是很好的,除了我不知道它是如何绑定到这个模型-因为我不确定它是如何绑定的,我不知道如何通过指定不同的名称为发送的值应用自定义绑定(发送JSON 'application/JSON '):

public class RequestModel
{
    [JsonProperty(PropertyName = "sName")]
    public String Name {get;set;}
    public List<AEntity> RequestEntities {get;set;}
}

我知道RequestEntities将需要一些绑定工作,但为什么RequestModel.Name不绑定到JSON中的sName ?RequestModel.RequestEntities真的很尴尬,因为JSON被发送的形式是:RequestModel.RequestEntities[0].ID对应于iID_0很棒吧?我无法更改JSON的发送方式。

{
    "RequestModel" : 
    {
        "sName" : "john",
        "iID_0" : 1,
        "iID_1" : 2,
        "iID_2" : 3
    }
}

是否可以指定MediaTypeFormatter或获取JSON作为参数?我如何绑定到那个模型?

所有这些幕后的魔法都没有帮助。

WebAPI媒体类型格式化程序没有绑定JSON

默认的ASP。NET ModelBinder不能处理这种复杂的对象。因此,有两种方法可以使它工作。

1)实现自己的ModelBinder,您可以在这里查看:. NET MVC模型绑定,这将需要一些工作来实现。

2)做一点改变和行动(我认为你应该这样做!):

<我>像这样用ajax发布我们的数据:

data: JSON.stringify({ name: 'name here', requestEntities: [...content as an array] }),

对象:确保JSON中的每个名称都与模型中的属性名称匹配,否则默认的模型绑定器将失败。

分别发送名称和请求:

[HttpPost]
public ResponseModel Handler(string name, List<AEntity> requestEntities)
{
    //Populate RequestModel here..
    return CreateTableResponse(name, tableRequest);
}

希望这对你有帮助!