冒号不在资源参数中进行URL编码

时间:2016-01-29 10:54:33

标签: angularjs urlencode url-encoding angular-resource

我正在使用Angular的资源模块来访问Web API,但我遇到了问题,因为API使用URI作为主键。

每当我尝试调用此API时,将URI作为字符串参数传递,我都会遇到[smooch show]错误。仔细观察,Resource会在URI中转义所有正斜杠,但不会在开始时转义冒号。它正在对看起来像这样的网址进行GET:400 Bad Request,这当然是无效的。我也尝试用反斜杠转义冒号,但这也不起作用。

如何让Resource正确地转义我的参数?在调用之前,我尝试用http://myserver/api/objects/http:%2F%2Fexample.comk%2FmyURI%2F替换冒号,但这会导致%3A再次编码,返回%

服务处理资源如下所示:

404 Not Found

我称之为:

angular.module('adminApp').factory('MyObject', myObject);

function myObject($resource) {
    return $resource('/api/objects/:uri');
};

1 个答案:

答案 0 :(得分:1)

我通过将URI作为查询参数而不是作为请求URL的一部分传递来解决此问题。我这样做是通过将我的资源服务更改为:

angular.module('adminApp').factory('MyObject', myObject);

function myObject($resource) {
    return $resource('/api/objects');
};

并将调用代码保持不变。然后ngResource创建一个看起来像GET的{​​{1}},这很好。

基本上,如果您在API参数中使用了不常用的字符,请将它们放在查询字符串中而不是URL中! : - )