Я передаю запрос odata, как показано ниже
http://localhost:5000/odata/Levels?$filter=contains(Code, '+14')
Однако, когда он попадает в мой контроллер, я вижу, что полученный объект фильтра заменяется как
{contains(Code, ' 14')}
Как видите, +14 заменяется 14, где + заменяется пробелом, из-за чего мой запрос не выполняется. Как я могу исправить эту проблему?
@MihailStancescu: не могли бы вы помочь мне, как я смогу это закодировать? Я использую здесь Angular fronted.
@Kiran, это не имеет ничего общего с Angular или OData. В URL-адресе некоторые символы имеют особое значение и должны быть закодированы (например, /, :', # ,'?'). В URL-адресе знак плюса - это пробел. Вот почему вы видите ' 14'
Кстати, любая клиентская библиотека OData позаботится о кодировании.
@PanagiotisKanavos: Понятно ... это действительно полезно. позвольте мне исправить это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте вот так:
http://localhost:5000/odata/Levels?$filter=contains(Code, encodeURIComponent('+14'))
Я не знаю, как вы генерируете остальную часть URI, но вы должны заменить +14 закодированным представлением, прежде чем отправлять его на сервер.
OData не может распознать encodeURIComponent(), я вижу это сообщение "An unknown function with name 'encodeURIComponent' was found. This may also be a function import or a key lookup on a navigation property, which is not allowed."
Также я думаю, что URI кодируется по умолчанию, поскольку я вижу, что% 20 и% 27 и т. д. Добавляются к пути, который заканчивается на контроллере.
encodeURIComponent - это функция JavaScript. Он не имеет никакого эффекта, когда появляется в URL-адресе. Даже если OData распознает эту функцию, она будет применена к сервер, к декодированному URL. Знак плюс все равно будет переведен на пробел
As you can see +14 is being replaced 14 where + is replaced with a space due to which my query is failing. How can I fix this issue?
Замените + на %2B, затем выполните запрос odata следующим образом:
http://localhost:5000/odata/Levels?$filter=contains(Code, '%2B14')
Вам нужно закодировать значение, чтобы передать его контроллеру odata, как вы этого хотите.