Двоеточие не кодируется URL в параметрах ресурса

0

Я использую модуль 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) {
...
});
  • 0
    Вы пытались добавить обратную косую черту перед двоеточием?
  • 0
    @Voreny Да, в конечном итоге выглядит так: http://myserver/api/objects/http%5C:%2F%2Fexample.comk%2FmyURI%2F , так что не лучше!
Теги:
url-encoding
urlencode
angular-resource

1 ответ

1
Лучший ответ

Я обошел эту проблему, передав 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-адрес! :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню