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

时间:2017-06-22 05:34:50

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

当多个参数传递到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)
{
}

JS档案

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

}, function () {
    alert("Error Occur");
})

4 个答案:

答案 0 :(得分:3)

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

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
}

答案 1 :(得分:2)

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

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

public class RequestModel
{
    public A1 Emp {get;set;}
    public List<A2> EmpMarks {get;set;}
}

然后从post方法

中的请求正文中获取它
[Route("Save")]
[HttpPost]
public string Save([FromBody]RequestModel Emps)

答案 2 :(得分:0)

如果您想将多个参数传递给POST电话,您可以按照以下步骤操作,并添加尽可能多的参数来匹配服务。

var data = new FormData();
data.append('Emp', $scope.Emp);
data.append('EmpMarks', $scope.EmpMarks);
$http.post('/api/Employee/Save', **data**, { 
  withCredentials : false,
  transformRequest : angular.identity,
  headers : {
            'Content-Type' : undefined
    }
  }).success(function(resp) { });

答案 3 :(得分:0)

[Route("Save")]
[HttpPost]
public string Save(JObject EmpData)
{
dynamic json = EmpData;
A1 Emp=json.Emp.ToObject<A1>();
List<A2> EmpMarks=json.ToObject<List<A2>>();
}

这是另一种选择。这对我有用