资源的角度尾部斜杠

Nix*_*Nix 34 angularjs

我的api需要一个api调用的斜杠.我想知道如何用棱角分离它.

所以我需要能够访问/tasks//tasks/xxxx/. 尝试通过以下方式进行:

angular.module('taskServices', ['ngResource']).
        factory('Tasks', function($resource){
            return $resource('/tasks/:task_id/', {}, {
                 query: {method:'GET', 
                         params:{},
                         isArray:true}
            });
 });
Run Code Online (Sandbox Code Playgroud)

和a

$scope.tasks = Tasks.query(); 
Run Code Online (Sandbox Code Playgroud)

但它会产生一个/tasks或一个tasks/xxx查询.

我怎么能强迫它永远/tasks//tasks/xxx/

Mar*_*cci 64

这似乎已经修复:https://github.com/angular/angular.js/pull/5560

您现在可以这样配置它:

app.config(function($resourceProvider) {
  $resourceProvider.defaults.stripTrailingSlashes = false;
});
Run Code Online (Sandbox Code Playgroud)


pko*_*rce 34

这行 AngularJS源代码中显式删除了尾部斜杠.我不完全确定这段代码的基本原理是什么,但是已经有一个问题:https://github.com/angular/angular.js/issues/992

如上所述,$resource工厂非常适合符合特定规范的RESTful端点.虽然$resource在与符合本规范的后端进行交谈方面做得很好,但它有一些限制可能会排除那些不遵守预期合同的后端$resource.在这种情况下,最好的方法是切换到使用$http此问题中提到的低级服务:从服务器获取数据的推荐方法

$http 是一个非常强大和灵活的服务,允许完全控制URL,参数发送等.

  • 转义斜杠('foo /:id \\ /')对我有用(v1.1.3) (16认同)

小智 20

在url模板的最末端添加一个空格在这里工作(使用角度1.2.0测试):

{url: '/user/:id/ '}
Run Code Online (Sandbox Code Playgroud)

  • 这里要小心.如果这将用于查询字符串中的某些参数的GET,它将失败! (9认同)

小智 6

在Chrome和Safari上为我添加2个反斜杠以逃避URL上的尾部斜杠.

然而Firefox确定从URL中删除尾部斜杠并将正斜杠转义为%5C的反斜杠编码是个好主意...很好:-)所以在上面的例子中你会得到http:// example .com/controller/save%5C,然后404s在服务器上.

我正在为我的项目使用Django + TastyPie并且需要在URL上使用尾随斜杠,我将寻找修改ngResource而不是降低到$ http作为最低标准的所有内容.