【发布时间】:2016-05-08 00:04:53
【问题描述】:
我有一个使用 ASP Web API 实现的后端,并且在 angularjs 中,我为 crud 注入了 restangular。所以,在 angularjs 控制器中我有:
gestionale.controller('mainController', function ($scope, $http, Restangular) {
var basePersonale = Restangular.all('api/Personale');
basePersonale.getList().then(function (personale) {
$scope.myData = personale;
});
....
....
}
在控制器的某个时刻,我需要发出 PUT 请求:
var person = $scope.myData[0];
person.put();
变量“person”的值是正确的,但是当执行我在 Firefox 调试器中看到的 put 方法时:
Request method: PUT
Request URL: http://127.0.0.1:49375/api/Personale
Status Code: 405 Method not allowed
请求的参数是:{"Id":1,"Nome":"Mat"} 并且是正确的。
实际上该方法是不允许的,因为在 web api 中 put 方法会响应这个 url,例如:
// PUT api/Personale/5
为什么 PUT 方法的请求 url 不正确?
【问题讨论】:
-
我敢打赌这与承诺解决方案有关。尝试将您的 put() 调用放在上述代码中的 .then() 函数块内,看看它是否有效。如果是这样,那么您需要更改代码,以便仅在 getList() 承诺以适合您尝试的方式解决后才发出 put 请求。
-
问题是我 getList 我填充了一个 ng-grid 并且当我编辑一个单元格时我需要发出一个 put 请求
-
如果您需要使用由 getList() 填充的对象,那么您必须确保 put() 仅在 getList() 承诺解决后触发。如果 put() 有时会在 getList() 对象之前或没有 getList() 对象之前触发,那么您需要返工。除此之外,Restangular 将尝试在您的 baseUrl 上进行操作,如您所见。因此,您需要调整代码以更恰当地使用 Promise,或者查看使用 Restangular 构建自定义 URL 的不同方式,避免使用 getList() github.com/mgonto/restangular#url-building 返回的对象
-
Method not allowed 是一个 WebAPI 错误,通常表明相关路由不支持 PUT。介意发布您的 WebAPI 方法吗?
标签: javascript html angularjs restangular