我发现使用[fromapi]属性我可以传递一个复杂的对象。 当我尝试传递复杂对象列表时,它不起作用。
在客户端我使用微风。服务器端是webapi。
我该怎么做?
答案 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))
}