我正在学习WebAPI并试图做一个HTTP Post我几乎让它工作我只是无法弄清楚如何让它发布整个数据数组。数组的计数是正确的,我没有错误它只是将数组的第一个元素发布到我的表。
我的代码如下。可能有一种更简单的方法可以做到这一点,我愿意接受任何建议或最佳实践,因为我只是在学习这一切是如何运作的。感谢关于我做错的任何提示/想法。
[System.Web.Http.HttpPost]
public void Post([FromBody]List<cert_unit_Angular> unitsPassed)
{
cert_unit_Angular CertUnit = new cert_unit_Angular();
foreach (var element in unitsPassed)
{
CertUnit.cc_id = element.cc_id;
CertUnit.unit_id = element.unit_id;
}
db.cert_unit_Angular.Add(CertUnit);
db.SaveChanges();
}
编辑1:发送值的客户端(似乎正在工作,因为我正在获取正在发送的元素的正确计数)。
$.ajax({
type: 'POST',
traditional: true,
url: '/api/PostToTable/Post/',
dataType: 'json',
data: objdata,
contentType: 'application/json',
success: function (result) {
Console.Log(result);
},
error: function (result) {
alert(result);
}
});
编辑2:获取我的数组值的客户端代码。我只是使用GET来获取数据。这对我有用,因为我获得了正确的数据量。我正在努力从中发布多行。
function getCert(cc_id) {
$http.get('api/Cert/Get/', { params: { id: cc_id } })
.success(function (data) {
$scope.selectedclients = data;
})
}
var objdata = JSON.stringify($scope.selectedclients);
编辑3.要求XHR数据。
请求有效负载:
[{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST10&#34;&#34; $$ hashKey&#34;:&#34;对象:5&#34;},{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST11&#34;&#34; $$ hashKey&#34;:&# 34;对象:6&#34;},{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST13&#34;&#34; $$ hashKey&#34; :&#34;对象:8&#34;}]
请求网址:http://localhost:28276/api/PostToTable/Post/
部首: 接受:application / json,text / javascript, / ; Q = 0.01 内容类型:应用程序/ JSON 起源:http://localhost:28276 引用者:http://localhost:28276/ User-Agent:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 48.0.2564.97 Safari / 537.36 X-请求-随着:XMLHttpRequest的
(很抱歉标题格式很糟糕)
EF模型看起来像......
public partial class cert_unit_Angular
{
public string unit_id { get; set; }
public int cc_id { get; set; }
}
unit_id是我的主要/实体密钥。
答案 0 :(得分:0)
实际上你正在保存列表中的最后一项,你的问题是你只有一个CertUnit实例,new和add需要在循环内部
foreach (var element in unitsPassed)
{
cert_unit_Angular CertUnit = new cert_unit_Angular();
CertUnit.cc_id = element.cc_id;
CertUnit.unit_id = element.unit_id;
db.cert_unit_Angular.Add(CertUnit);
}
db.SaveChanges();
答案 1 :(得分:0)
对于处理类似问题的任何人,我通过将代码更改为此来解决了我的问题...
foreach (var element in unitsPassed)
{
cert_unit_Angular CertUnit = new cert_unit_Angular();
CertUnit.cc_id = element.cc_id;
CertUnit.unit_id = element.unit_id;
db.cert_unit_Angular.Add(CertUnit);
db.SaveChanges();
}
在我这样做之后,它仍然抛出错误我认为是因为unit_id是我的主键。我必须向Entity框架和DB端添加一个标识列,然后它正确地发布了我的所有行。感谢您的帮助。