Кодировка апострофа в запросе GET API через «HttpUtility.UrlEncode» и «Uri.EscapeDataString» выдает ошибку

#c# #.net #.net-core #asp.net-web-api #encoding

Вопрос:

Я делаю запрос на получение от почтальона и ожидаю список таблиц в ответ: Ниже приведен URI: https://XYZ/api/Sam's Club Operations Executive Pamp;L Report DS/Tables .

Этот запрос выдает ошибку, так как в URI у нас есть апостроф, т. е. у Сэма.

Я попробовал HttpUtility.UrlEncode и Uri.EscapeDataString, и во время отладки я вижу, как « Sam кодируется в Sam’s, и URI выглядит так "Sam's Club Operations Executive P&L Report DS" .

Однако, когда я пытаюсь открыть соединение, я получаю исключение. Мое поле каталога строк подключения выглядит следующим образом: Catalog=Sam's Club Operations Executive P&L Report DS; .

Исключение, вызванное:

{«Либо база данных» Sam’s Club операций эффективных P&L отчет DS » не существует, либо у вас нет разрешений на доступ к ней.rnrn Технические подробности:rn Идентификатор активности: f626f5b7-b8ed-4697

Я использую базовую аутентификацию и отправляю правильное имя пользователя и пароль с каждым запросом. Как я могу преодолеть это исключение.

Комментарии:

1. Эта ошибка не имеет ничего общего с HTTP, ASP.NET Ядро или кодировка. Коду службы не удалось расшифровать URL-адрес. Это также указывает на огромную уязвимость в системе безопасности — служба использует ввод без его проверки. Представьте, что произойдет, если кто-то закодирует someDb; drop table users-- URL-адрес. Если эта часть URL-адреса предназначена для представления базы данных, служба даже не должна принимать недопустимое имя. Он должен вернуть как минимум 404

2. В любом случае на стороне клиента вы ничего не сможете исправить. Кодировка не ошибочна. Служба, по сути, нарушена. Вам придется опубликовать сервисный код, чтобы люди могли помочь его исправить

Ответ №1:

Закодируйте URI следующим образом, чтобы выполнить вызов API: $""" Convert.ToString(WHATEVERURISTRING) $"";";