Я использую модуль Angular Resource для доступа к веб-API, но у меня возникают проблемы, поскольку API использует URI в качестве первичного ключа.
Всякий раз, когда я пытаюсь сделать вызов этого API, передавая в URI в качестве строкового параметра, я получаю 400 Bad Request
ошибок 400 Bad Request
. При ближайшем рассмотрении ресурс пропускает все косые черты в URI, но не двоеточие в начале. Он делает GET по URL-адресу, который выглядит так: 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');
};
и я называю это следующим образом:
MyObject.get({ uri: myUri }, function(result) {
...
});
Я обошел эту проблему, передав URI в качестве параметра запроса, а не как часть URL-адреса запроса. Я сделал это, изменив мою службу ресурсов на это:
angular.module('adminApp').factory('MyObject', myObject);
function myObject($resource) {
return $resource('/api/objects');
};
и оставляя код вызова таким же. Затем ngResource создает GET
который выглядит как http://myserver/api/objects?uri=http:%2F%2Fexample.comk%2FmyURI%2F
, что хорошо.
В принципе, если вы используете необычные символы в параметрах API, поместите их в строку запроса, а не в URL-адрес! :-)
http://myserver/api/objects/http%5C:%2F%2Fexample.comk%2FmyURI%2F
, так что не лучше!