我的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没有捕获参数,我该怎么办呢?
谢谢你!
答案 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);
}
}