我正在使用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');
};
答案 0 :(得分:1)
我通过将URI作为查询参数而不是作为请求URL的一部分传递来解决此问题。我这样做是通过将我的资源服务更改为:
angular.module('adminApp').factory('MyObject', myObject);
function myObject($resource) {
return $resource('/api/objects');
};
并将调用代码保持不变。然后ngResource创建一个看起来像GET
的{{1}},这很好。
基本上,如果您在API参数中使用了不常用的字符,请将它们放在查询字符串中而不是URL中! : - )