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作为参数?我如何绑定到那个模型?
所有这些幕后的魔法都没有帮助。
默认的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);
}
希望这对你有帮助!