複数のパラメータが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");
})
データを含むモデルを使用することをお勧めします。
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
}
[FromBody]
属性を2回宣言しているため、問題が発生します。設計上、http POSTには本文が1つしかなく、[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)
[Route("Save")]
[HttpPost]
public string Save(JObject EmpData)
{
dynamic json = EmpData;
A1 Emp=json.Emp.ToObject<A1>();
List<A2> EmpMarks=json.ToObject<List<A2>>();
}
それは別のオプションです。それは私のための仕事です
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) { });