如何从breezejs将复杂对象列表传递给webapi?

时间:2015-11-05 18:50:17

标签: asp.net-web-api breeze

我发现使用[fromapi]属性我可以传递一个复杂的对象。 当我尝试传递复杂对象列表时,它不起作用。

在客户端我使用微风。服务器端是webapi。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以创建一个具有对象列表属性的DTO

public class CreateUserDto
{
   public string Name {set;get;}
   public List<RoleDto> Roles {set;get;}
   public CreateUserDto()
   {
      this.Roles = new List<RoleDto>();
   }
}
public class RoleDto
{
  public int Id {set;get;}
  public string Name {set;get;}
}

您可以将其用作Web api端点的参数

public HttpResponseMesssage Save(CreateUserDto model)
{
  //Check model.Roles now
  // to do  : Return a response
}

从客户端,您可以发送这样的数据。(假设您已将jQuery库加载到您的页面)

var data { Name : "TestName",Roles:[]}
data.Roles.push(new { Id:1,Name:"Admin"});
data.Roles.push(new { Id:2,Name:"Editor"});

$.post("YourEndpointHere",data,function(response){
  // do something with response
});

Modelbinding将负责将发布的表单数据转换为Save方法中的CreateUserDto实例。您可以访问model.Roles属性以获取所需的复杂对象列表。

答案 1 :(得分:0)

您可以使用如下字典:

[HttpPost]
public IQueryable<Product> GetProducts(Dictionary<string, object> data)
{
    var categoryId = Convert.ToInt32(data["categoryId"]);
    var category = _context.Categories.Single(a => a.ID == categoryId);

    var galleryId = Convert.ToInt32(data["galleryId"]);

    var langId = Convert.ToInt32(data["langId"]);

    var searchStr = data["str"];

    return category.Products.Where(a => a.GalleryID == galleryId, a.LanguageID == langId, a.Description.Contains(searchStr))

}