“无法将多个参数绑定到请求的内容。” 在Web API和angularJs中

saf*_*sak 6 javascript c# asp.net-mvc asp.net-web-api angularjs

当传入多个参数时,WebApi将导致异常"Can't bind multiple parameter to the request's content."。对以下代码有任何解决方案

public class A1
{
   public int id {get;set;}
   public string name {get;set;}
}

public class A2
{
   public int id2 {get;set;}
   public string name2 {get;set;}
}

[Route("Save")]
[HttpPost]
public string Save([FromBody]A1 Emp, [FromBody]List<A2> EmpMarks)
{
}
Run Code Online (Sandbox Code Playgroud)

JS文件

$http({
    method: "post",
    url: "/api/Employee/Save",
    data: JSON.stringify({
        Emp: $scope.Emp,
        EmpMarks: $scope.EmpMarks
    })
}).then(function (response) {

}, function () {
    alert("Error Occur");
})
Run Code Online (Sandbox Code Playgroud)

Luk*_*zki 6

您可能要使用包含数据的模型:

public class A1
{
    public int id { get; set; }
    public string name { get; set; }
}

public class A2
{
    public int id2 { get; set; }
    public string name2 { get; set; }
}

public class AModel 
{
    public A1 Emp { get; set; }
    public A2 EmpMarks { get; set; }
}


[Route("Save")]
[HttpPost]
public string Save(AModel aData)
{
    // ... your logic here
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*und 5

出现此问题是因为您要[FromBody]两次声明该属性。根据设计,http POST 只有一个主体,并且[FromBody]会尝试读取主体中的所有内容并将其解析为您指定的对象。

要解决此问题,您需要创建一个与附加到请求正文的客户端对象相匹配的对象。

public class RequestModel
{
    public A1 Emp {get;set;}
    public List<A2> EmpMarks {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后从你的 post 方法中的请求正文中获取它

[Route("Save")]
[HttpPost]
public string Save([FromBody]RequestModel Emps)
Run Code Online (Sandbox Code Playgroud)