WebAPI仅绑定第一个参数

时间:2012-05-31 17:09:32

标签: asp.net-mvc-4 asp.net-web-api

死的简单问题,可能不是那么简单的答案。发布JSON。

public void Post(Model1 model1, Model2 model2)
{}

填充了model1,但没有填充model2(null)。

public void Post(Model2 model2, Model1 model1)
{}

现在,填充了model2,但没有填充model1(null)。

为什么?

修改

两个参数的原因?模型2曾经从Model1引用,但是没有用。那是我分开的时候。

修改

右。感谢marcind对上述问题的回答。现在因为原始设置不起作用。我不再是形式宇宙了。我发布了Json。如果模型中有子对象,则在json中发布子对象。

鉴于

class ProductEditModel {
      public string Name {get; set;}
}

class UserEditModel {
      public string User {get; set;}
      public ProductEditModel Product {get; set;}
}

以下

{"user": "philip", "product.name": "barbie"}

无法运作。如果你在js尝试并设置等效的语义

,你甚至会得到一个错误
{user: "philip", product.name: "barbie"}

以下任何一项工作都没有,我不知道为什么会这样做:

{"user": "philip", "productname": "barbie"}


{"user": "philip", "product_name": "barbie"}

什么是工作,哪些应该是我的职业应该是显而易见的

{"user": "philip", "product": {"name": "barbie"}}

请踢我。

小心!如果对上述模型进行相应的编辑,则以下内容无效。

{"user": "philip", "ProductEditModel": {"name": "barbie"}}

1 个答案:

答案 0 :(得分:2)

不确定您使用的是哪个版本,但我们已经确定的一般规则是,在绑定复杂类型时,Web API会将请求的整个主体视为表示单个实体,从而表示单个操作参数。在您的情况下,如果您想绑定多个Model,您可以引入自定义绑定对象,或者您可以绑定到Model[]或其他一些集合类型。