【问题标题】:How to capture a $scope object with multiple objects from web api如何从 web api 捕获具有多个对象的 $scope 对象
【发布时间】:2016-06-01 10:49:37
【问题描述】:

我正在尝试传递一个包含多个对象的对象,如下所示

[Object, Object, Object, Object]
0
:
Object
ProductID
:
"50"
__proto__
:
Object
1
:
Object
BrandID
:
24
__proto__
:
Object
2
:
Object
BrandID
:
26
__proto__
:
Object
3
:
Object
BrandID
:
20
__proto__
:
Object

其中一个对象的键值对与其他对象不同。如何从 Web Api 控制器捕获这些数据。我应该如何在 Web Api 项目中修改我的模型。

【问题讨论】:

  • 这里最好显示json,因为显示的数据结构不清楚。
  • json 应该是object=[{ProductID:"50"},{BrandID:"24"},{BrandID:"26"},{BrandID:"20"}]

标签: javascript c# angularjs object asp.net-web-api


【解决方案1】:

在我看来,您尝试发送到 Web API 的数组包含具有不同架构的不同对象。这种方法肯定容易出错,并且不允许您正确使用ModelBinding

你为什么不把你的对象的格式改成这样呢?

$scope.myObject = {
    ProductID: 50,
    BrandIDs: [24, 26, 20]
};

使用这种对象,您将能够将其绑定到 Web API 中的强类型模型。

public class MyModel {
    public int ProductID { get; set; }
    public List<int> BrandIDs { get; set; }
}

public IHttpActionResult Post(MyModel model) {
    var productId = model.ProductID;
    foreach(var brandId in model.BrandIDs) {
        DoSomething(brandId);
    }
    return Ok();    
}

【讨论】:

  • 我正在杀死我自己以获得这样的范围对象通过。但做不到
  • 您能解释一下原因吗?
【解决方案2】:

您只需要创建一个与您对应的 JSON 类模型,Web Api 就会自动绑定它。看来你传递的是一个数组,所以你可以这样做:

public void Execute(Model[] input)
{

}

....

public class Model
{
    public int? ProductId {get;set;}
    public int? BrandId {get;set;}
}

或者如果你想要一个内部有一个数组的对象,你可以传递一个这样的类

public class ProductsContainer
{
     public Product[] Products {get;set;}
}

【讨论】:

  • 由于我传递了多个 BrandID,因此该模型可以使用。 ?
  • 我不太清楚你所说的多个 BrandId 是什么意思,如果你的意思是多个对象,每个对象都包含一个 BrandId,那么可以。
  • 非常感谢。
  • 不客气,如果你喜欢,请不要忘记接受答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2019-05-20
相关资源
最近更新 更多