#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-адреса предназначена для представления базы данных, служба даже не должна принимать недопустимое имя. Он должен вернуть как минимум 4042. В любом случае на стороне клиента вы ничего не сможете исправить. Кодировка не ошибочна. Служба, по сути, нарушена. Вам придется опубликовать сервисный код, чтобы люди могли помочь его исправить
Ответ №1:
Закодируйте URI следующим образом, чтобы выполнить вызов API: $""" Convert.ToString(WHATEVERURISTRING) $"";";