【问题标题】:How to specify headers parameter for custom Angular $resource action如何为自定义 Angular $resource 操作指定 headers 参数
【发布时间】:2012-10-09 01:27:41
【问题描述】:

以下工作正常,但我认为这会全局修改 $httpProvider,这不是我想要的。

angular.module('SessionService', ['ngResource'])
    .config(function($httpProvider){
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
    })
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false
            },
        });
        return resource;
    })
LoginCtrl = function($scope,Login) {
    $scope.login = function(){
        Login.post($.param({user:$scope.user.username,password:$scope.user.password}),$.noop,$.noop)
    }
}

有什么办法可以代替吗?

...
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false,
                headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} // ignored
            },
        });
        return resource;
    })

“headers”参数似乎被忽略了。请求还在

Content-Type:application/json;charset=UTF-8

我的标头值还可以吗?

【问题讨论】:

标签: angularjs


【解决方案1】:

我已经确认 1.1.3 确实支持这一点。但是,您需要确保您还获得了 1.1.3 版本的资源服务。快速测试:

angular.module('myApp', ['ngResource']).
  config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl: 'partials/partial1.html',controller: 'MyController'});
    $routeProvider.otherwise({redirectTo: '/'});
  }])

  .controller("MyController", function( $scope, Bug) {
    Bug.post({test:"test"});
  })

  .factory('Bug', function($resource){
    var resource = $resource('/bug',{},{
        post:{
            method:"POST",
            isArray:false,
            headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
        },
    });
    return resource;
});

这将发出请求,并将标头设置为(使用 Chrome 确认):

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

快速说明,我无法找到 angular-resource.js 的下载,所以我不得不去 github 网站下载它。是here

为了一些傻笑,我创造了一个小提琴。请注意,将有一个失败的 POST 调用,但其标头设置正确。 Example Fiddle

【讨论】:

    【解决方案2】:

    虽然开发文档(截至 10 月 12 日)表明可以在 $resource 中覆盖标头,但它尚未发布(v1.0.2 或 v1.1.0)。但是,该功能位于 v1.0.x 和 master 分支中。为了获得该功能,您现在可以考虑从 v1.0.x 分支构建。

    如何构建:http://docs.angularjs.org/#H1_4

    或者,您可以从快照构建中提取:http://code.angularjs.org/snapshot/

    看起来这个功能将在下一个版本中。

    【讨论】:

    • 我会尝试做那个构建。 +1 链接。谢谢!
    • -1 感谢 AngularJS 让我们尝试不可能的事情!
    【解决方案3】:

    只需添加 1.1.5 资源文件(和其他)的链接:http://code.angularjs.org/1.1.5/

    您可以设置网址以匹配您要查找的版本。
    例如1.1.4:http://code.angularjs.org/1.1.4/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2020-02-20
      相关资源
      最近更新 更多