【问题标题】:How to get object returned by POST method using angular $resource?如何使用角度 $resource 获取 POST 方法返回的对象?
【发布时间】:2017-01-08 05:34:33
【问题描述】:

我的 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 没有捕获参数,我该怎么办?

谢谢!

【问题讨论】:

  • 您是否尝试删除 .$promise。因为 save 方法已经返回了一个 promise
  • @ManuelObregozo 我有,但后来我收到以下错误:save().then() is not a function..

标签: angularjs post angular-promise angular-resource


【解决方案1】:

试试下面的,应该可以的:

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

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

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

【讨论】:

  • 哦,是的,我也试过这个,但我得到了同样的结果。 response 对象看起来是一样的。
  • $scope.hotspot 是要发布的参数还是数据?再次检查成功函数必须是第三个参数。
  • $scope.hotspot 是要发布的数据,而不是参数。无论如何,由于参数是可选的,因此该函数将清楚地解释为 [success] 参数。
  • 检查此stackoverflow.com/questions/23599277/… 似乎是由于服务器的空响应而发生的。
  • 不,响应不为空,因为我已经在问题文本中指定了。响应包含预期的整数。
【解决方案2】:

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

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

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

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

        return BadRequest(e.Message);
    }
}

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

hotspots.save($scope.hotspot).$promise.then(function (response) {
     console.log(response.id);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2022-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多