如何使用angular $ resource获取POST方法返回的对象?

时间:2017-01-04 20:26:24

标签: angularjs post angular-promise angular-resource

我的Web API控制器中有以下POST方法:

        [HttpPost]
        public async Task<IHttpActionResult> Post(Hotspot hotspot)
        {
            try
            {
                int id = await SomeMethod();
                return Ok(id);
            }
            catch (ArgumentException e)
            {

                return BadRequest(e.Message);
            }
        }

然后我发出POST请求并尝试获取 id

var hotspots = $resource('/api/adminhotspots', { save: { method: 'POST' } });
hotspots.save($scope.hotspot).$promise.then(function (id) {
     console.log(id);
});

不幸的是,我得到了一个 $ promise对象。我的控制台显示:

m
  $promise : d
  $resolved : true

我可以检查服务器是否在我的开发者控制台的“网络”选项卡中正确发送参数。确实如此。

为什么$ resource没有捕获参数,我该怎么办呢?

谢谢你!

2 个答案:

答案 0 :(得分:0)

尝试以下操作,这应该有效:

 var hotspots = $resource('/api/adminhotspots');
    hotspots.save($scope.hotspot,{}, function (response) {
         console.log(respose);
    });

请记住,非GET“类”操作具有以下参数:

Resource.action([parameters], postData, [success], [error])

答案 1 :(得分:0)

因为我设法检测到代码中的错误点,我会自己发布一个答案,以便其他人可以得到帮助。

似乎发送原始变量是问题所在。客户端将从服务器接收的数据打包到$ resource对象中,原始变量(在我的情况下为 int )将丢失。

解决方案是将整数作为对象发送。为了简单起见,我只会在这些行中添加一些括号:

getTag()

在客户端, id 可以这样获得:

[HttpPost]
public async Task<IHttpActionResult> Post(Hotspot hotspot)
{
    try
    {
        int id = await SomeMethod();
        return Ok(new {id});
    }
    catch (ArgumentException e)
    {

        return BadRequest(e.Message);
    }
}