【问题标题】:AngularJs $resource not invoking custom 'GET'AngularJs $resource 不调用自定义“GET”
【发布时间】:2017-11-27 12:14:40
【问题描述】:

我在托管here 的.Net 中创建了一个简单的RESTful 服务。 我正在尝试从我的 angularjs 代码中调用 getByName 操作。但是,angularjs 代码调用默认的 'get' 而不是 'getByName'

AngularJs 代码:

app.factory('UserResourceSvc',function($resource){
    var baseApiUrl = "http://publicapitest.azurewebsites.net/";
    //var baseApiUrl = "http://localhost:92/"
    return $resource( baseApiUrl + 'api/Employee/:id',{id: "@id"},
        { 
            getByName : {method: 'GET', params: {} , isArray: false} 
        }
    );    
});

我在按钮点击时调用下面的函数来触发 API 调用。

 $scope.getByName = function(){
   UserResourceSvc.getByName(function(data){
      debugger;
   })
 }

我收到以下错误消息:

angular.js:14794 Error: [$resource:badcfg] Error in resource configuration for action `getByName`. Expected response to contain an object but got an array (Request: GET http://publicapitest.azurewebsites.net/api/Employee)
http://errors.angularjs.org/1.6.7/$resource/badcfg?p0=getByName&p1=object&p2=array&p3=GET&p4=http%3A%2F%2Fpublicapitest.azurewebsites.net%2Fapi%2FEmployee
    at angular.js:116
    at $http.then.response.resource (angular-resource.js:757)
    at processQueue (angular.js:17145)
    at angular.js:17193
    at Scope.$digest (angular.js:18331)
    at Scope.$apply (angular.js:18628)
    at done (angular.js:12619)
    at completeRequest (angular.js:12863)
    at XMLHttpRequest.requestLoaded (angular.js:12780) "Possibly unhandled rejection: {}"

当我签入 fiddler 时,呼叫将转到 'http://publicapitest.azurewebsites.net/api/Employee' 而不是 'http://publicapitest.azurewebsites.net/api/Employee/getByName'

我错过了什么吗?

【问题讨论】:

  • 我已经很久没有使用 $resource(我发现只使用 $http 更容易)但我认为自定义操作仅适用于您从初始调用返回的项目的实例?所以你可以做UserResourceSvc.get(..),然后每个返回的实例都有一个$getByName 可用的函数,所以这可能不是你要找的方法?
  • 查看文档中的示例:docs.angularjs.org/api/ngResource/service/$resource#examples。 $charge 方法仅适用于从初始 API 调用返回的项目实例。

标签: angularjs asp.net-web-api2 asp.net-web-api-routing angular-resource


【解决方案1】:

您应该按如下方式指定方法 url:

getByName : {method: 'GET', url: baseApiUrl + 'api/Employee/getByName', params: {} , isArray: false} 

【讨论】:

  • 非常感谢@lzagkaretos,我的印象是键名“getByName”将负责调用正确的端点。在这种情况下,如果我们想使用自定义 REST 端点('get'、'put'、'post'、'delete' 除外),$resource 的第二个参数似乎是无用的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2015-08-16
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多