В ядре Asp.Net Odata, как предотвратить замену строки фильтра переданным текстом

Я передаю запрос odata, как показано ниже

http://localhost:5000/odata/Levels?$filter=contains(Code, '+14')

Однако, когда он попадает в мой контроллер, я вижу, что полученный объект фильтра заменяется как

{contains(Code, ' 14')}

Как видите, +14 заменяется 14, где + заменяется пробелом, из-за чего мой запрос не выполняется. Как я могу исправить эту проблему?

Вам нужно закодировать значение, чтобы передать его контроллеру odata, как вы этого хотите.

Mihail Stancescu 04.04.2021 11:09

@MihailStancescu: не могли бы вы помочь мне, как я смогу это закодировать? Я использую здесь Angular fronted.

Kiran 04.04.2021 12:36

@Kiran, это не имеет ничего общего с Angular или OData. В URL-адресе некоторые символы имеют особое значение и должны быть закодированы (например, /, :', # ,'?'). В URL-адресе знак плюса - это пробел. Вот почему вы видите ' 14'

Panagiotis Kanavos 06.04.2021 11:21

Кстати, любая клиентская библиотека OData позаботится о кодировании.

Panagiotis Kanavos 06.04.2021 11:30

@PanagiotisKanavos: Понятно ... это действительно полезно. позвольте мне исправить это.

Kiran 06.04.2021 20:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
44
2

Ответы 2

Попробуйте вот так:

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."

Kiran 04.04.2021 20:29

Также я думаю, что URI кодируется по умолчанию, поскольку я вижу, что% 20 и% 27 и т. д. Добавляются к пути, который заканчивается на контроллере.

Kiran 04.04.2021 20:31
encodeURIComponent - это функция JavaScript. Он не имеет никакого эффекта, когда появляется в URL-адресе. Даже если OData распознает эту функцию, она будет применена к сервер, к декодированному URL. Знак плюс все равно будет переведен на пробел
Panagiotis Kanavos 06.04.2021 11:28

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')

Другие вопросы по теме