我有一个webapi后端,在ProductController中使用以下方法:
[HttpGet]
[Route("api/product/FindName")]
public Product FindName(string name){
return name & "Hello "
}
我正在尝试在前端使用$ resource。
var resource = $resource('api/product/:id', {});
resource.query()将返回使用GetALL()方法在服务器端公开的所有项目。这很好。
$ resource中的{action}究竟是什么?我见过POST的例子,但是如果设置了
var resource = $resource('api/product/:id', {}, { FindName: { method: 'GET', params: { name: 'phone' } } });
这会在后端调用FindName方法吗?或者究竟是什么,我的意思是参数,如果我在方法中设置'GET'。
我打电话给
resource.FindName({ name: 'phone' }, function () {
});
但是后端没有被解雇。我看到fiddler向服务器请求的呼叫是
Demo/api/product?name=phone
答案 0 :(得分:0)
资源声明不正确。它应该是
var resource = $resource('api/product/:id', {}, { FindName: { method: 'GET', params: { id: 'phone' } } });
这会将id
占位符默认为值phone
。
现在可以进行调用
resource.FindName({}, function () { //gets api/product/phone
});
或覆盖id
部分
resource.FindName({id:'tablet'}, function () { //gets api/product/tablet
});
答案 1 :(得分:0)
资源具有内置的GET功能,无需定义已添加到FindName
的额外$resource
操作即可使用。
如果您将webapi上的路线更改为
[HttpGet]
[Route("api/product/{name}")]
public Product FindName(string name){
return name & "Hello "
}
然后你可以使用这样的资源从这条路线获取数据。
var resource = $resource('api/product/:id', {}, {});
resource.get({ id: 'phone' }, function () {
});
如果您希望两个名称参数匹配,您可以将:id
更改为:name
,也可以在resource.get
更改ID中将其命名为。
我希望这会有所帮助。