angularjs中$ resource中的操作

时间:2014-09-12 07:10:34

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

我有一个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 

2 个答案:

答案 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中将其命名为。

我希望这会有所帮助。