asp.net-mvc-4 - WebAPI仅绑定(bind)第一个参数

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

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

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

已填充 model1,但未填充 model2(空)。

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

现在,模型 2 已填充,但模型 1 未填充(空)。

为什么?

编辑

两个参数的原因? Model2 曾经是从 Model1 引用的,但这不起作用。就在那时我把他们分开了。

编辑

对。感谢 marcind 对上述问题的回答。现在由于原始设置不起作用的原因。我不再是形式宇宙了。我发布了杰森。如果模型中有子对象,则将子对象发布到 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"}}

最佳答案

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

关于asp.net-mvc-4 - WebAPI仅绑定(bind)第一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838126/

相关文章:

c# - 从 MVC HttpPost 将错误返回给 jQuery

asp.net-mvc - 为什么我的MVC4项目在bin文件夹下没有debug和release文件夹?

asp.net-mvc - 执行 PostAsync 时为什么等待不起作用?

c# - ASP MVC WebApi 调用返回错误 'not found'

asp.net-mvc - MVC GlobalFilters 未触发

jquery - 文本框字段失去焦点后?

asp.net-mvc-4 - 在asp.net mvc 4中从图像的URL View 中显示图像

html - 是否有一个 <meta> 标签来关闭所有浏览器中的缓存?

asp.net-mvc - Web API错误: The 'ObjectContent` 1' type failed to serialize the response body for content type

c# - Web API 和 HTTP 模块