在此过程中,我从Web API中获取了一系列“车辆”。我修改并对每辆车做任何事情。然后我想把列表发回来,而不经过循环......
我已经尝试了很多我抬头的方法。 我已经在WEB API中找到了一个断点,看看我是否能在那里得到阵列,但是我还没有能够。
public IHttpActionResult UpdateVehicles(Vehicle[] vehiclesArry)
{
return Ok();
}
我很困惑,如果我需要做一个$ post,或者我可以像我一直那样“得到”正确的方法。问题是我无法将数组转换为WEB API方法。
我的资源设置是这样的。
return $resource(appSettings.serverPath + "/api/Violators/:id",null,
{
'update': { method: 'PUT' },
'delete': { method: 'DELETE' },
'post': { method: 'POST' }
});
我尝试过使用$ post,但它说该对象不支持它。我不确定我还能尝试其他什么方式。我尝试在Web API中使用“动态”,这似乎也不起作用。
答案 0 :(得分:0)
创建一个像
这样的模型对象public class UpdateReq {
public IEnumberable<Vehicle> Vehicles { get;set; }
}
从你的角度来看,只需传递一个带数组的json
{
[v1, v2, v3]
}
答案 1 :(得分:0)
你错过了$ resource的params对象,所以它不知道id。
return $resource(appSettings.serverPath + "/api/Violators/:id", { id: '@id' });
您无需显式设置get,post,delete方法。那已经为你完成了。如果您的API使用PUT进行更新,请将其设置为:
return $resource(appSettings.serverPath + "/api/Violators/:id", { id: '@id' }, {
update: { method: 'PUT' }
});
此外,资源上的属性必须完全为vehiclesArry
,否则Web API将无法知道如何映射它。我也想回复@sowen。您需要设置端点接收的视图模型。
答案 2 :(得分:0)
我的假设是您在页面中遇到了一些脚本错误,或者您没有正确使用$ http方法。
人们通常遇到的一个问题是在角度控制器中使用正确的URL到web api端点。如果你没有做对,你可能会收到404错误。在浏览器控制台(网络选项卡)中查找这些内容
以下代码应该可以正常运行
$http.get("../api/Values/")
.then(function (res) {
var vehicles = res.data;
console.log('data received', JSON.stringify(vehicles));
//Let's update the Name of each vehicle.
$.each(vehicles, function (indx, item) {
item.Name = item.Name + " Updated";
});
console.log('data modified', JSON.stringify(vehicles));
//Let's make a call to web api with modified data
$http.post("../api/Values/UpdateVehicles", vehicles)
.then(function (res2) {
console.log('response', JSON.stringify(res2.data));
});
});
假设您在页面中正确加载了角度js,并且上面的代码是当前页面的角度控制器的一部分,并且您的Web api控制器具有2个操作方法,如下例所示。
public class ValuesController : ApiController
{
[HttpPost]
[Route("api/Values/UpdateVehicles")]
public IHttpActionResult UpdateVehicles(Vehicle[] vehiclesArry)
{
// just returning whatever came in for TESTING PURPOSE
return Ok(vehiclesArry);
}
public IEnumerable<Vehicle> Get()
{
return new List<Vehicle>
{
new Vehicle {Id = 1, Name = "Car"},
new Vehicle {Id = 2, Name = "Van"}
};
}
}
另外,仅供参考:我在我的api控制器中使用Attribute routing来获取UpdateVehicle
端点。