【问题标题】:Angularjs with restangular: wrong PUT url带有restangular的Angularjs:错误的PUT url
【发布时间】: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


【解决方案1】:

我遇到了完全相同的问题。我意识到我的模型中没有“id”字段。我只是确保在我的实例中设置了一个 id(来自 mongodb _id),现在 put 路由是正确的。在您的情况下,您似乎有一个 Id 字段,应将其转换为小写。

【讨论】:

    【解决方案2】:

    如果您使用的是 MongoDB,您需要告诉 Restangular 它所期望的 id 字段实际上是 _id。

    这可以像这样在全局范围内完成:

    RestangularProvider.setRestangularFields({
          id: "_id"
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2013-09-23
      • 2015-03-21
      相关资源
      最近更新 更多