Payman Biukaghazadeh Ответов: 1

Кодирование URL-адреса на стороне сервера в web API


We hosted a Web API to a customer. The customer send requests in which the + is included. Something like this:

/Orders?$filter=PaymentInfo_DateTime%20ge%202020-09-28T00:00:00+02:00%20and%20PaymentInfo_DateTime%20le%202020-09-29T00:00:00+02:00&$top=25&$select=OrderGUID,OrderNo&$count=true

Is there any solution to be able to change this plus signs to #2b in the request url? We just have control on API side, so could not encode the url from client side.


Что я уже пробовал:

Много искал, но явного ответа не нашел

Richard MacCutchan

Почему бы просто не исправить свой API, чтобы принять знак+?

Payman Biukaghazadeh

Как же так?

1 Ответов

Рейтинг:
1

Richard Deeming

Если вы не контролируете клиента, то вы не можете изменить клиента.

Зачем вам нужно заменять совершенно допустимую кодировку строки запроса на недопустимую пользовательскую кодировку? Все после первого # является частью фрагмента, а не строкой запроса, и не отправляется на сервер.


Payman Biukaghazadeh

Потому что наш API говорит:запрос, указанный в URI, недопустим. Значение DateTimeOffset текст '2020-09-28T00:00:00' должен быть в формате 'гггг-мм-ддтчч:мм:СС (''. с+)?(пппппп)?', а каждое поле значение находится в пределах допустимого диапазона
После того как мы заменили знаки + на %2b, все стало хорошо. Здесь мы не могли изменить url-адрес, который отправляет клиент. Мы хотим найти решение, чтобы иметь возможность изменить url-адрес на нашей стороне (веб-api)

Richard Deeming

%2b это отличается от того, что вы сказали в своем вопросе: "измените этот знак плюс на #2b".

%2b является ли URL-кодировка + знак. Один + в URL - адресе есть закодированный пробел. Ни один из них не является тем форматом, который вы указали.

Вы должны сказать своим клиентам, чтобы они правильно кодировали свои вызовы API.

Payman Biukaghazadeh

Я не мог изменить сторону клиента. Потому что он был отправлен из виртуальных сущностей Dynamics 365, и у нас нет никакого контроля над форматом url-адреса. Таким образом, мы должны быть в состоянии изменить + на %2b

Richard Deeming

URL - адрес от клиента является недопустимым. Если вы не можете изменить клиента, то вы не можете исправить клиента. Клиент не может вызвать ваш API, если он правильно не закодирует параметры запроса.

Payman Biukaghazadeh

Я это знаю. Но это было невозможно сделать. Есть ли какое-либо решение для стороны API? Например, в IIS или в коде API?

Richard Deeming

Если вы не можете изменить клиента для выполнения допустимых вызовов вашего API, то клиент не может вызвать ваш API.