从AngualrJS向Web API发送对象数组

时间:2015-12-03 22:54:29

标签: angularjs asp.net-web-api asp.net-web-api2

在此过程中,我从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中使用“动态”,这似乎也不起作用。

3 个答案:

答案 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端点。