1

考虑到我过去使用 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在绑定方面需要做一些工作,但为什么不在JSON 中RequestModel.Name绑定呢?sNameRequestModel.RequestEntities真的很尴尬,因为正在发送的 JSON 格式为:RequestModel.RequestEntities[0].ID对应于iID_0Great huh?我无法更改 JSON 的发送方式。

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

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

所有这些幕后的魔法都无济于事。

4

1 回答 1

0

默认的 ASP.NET ModelBinder 无法处理这种复杂的对象。因此,有两种方法可以完成这项工作。

1)实现一个自己的ModelBinder,你可以看看这里:ASP.NET MVC Model Binding,这需要一些工作来实现。

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

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

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

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

分别发送名称和请求:

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

希望这对你有帮助!

于 2013-05-24T21:25:31.990 回答