HttpClient, похоже, не уважает закодированные строки.
var id = Uri.EscapeDataString("\"MyId\"");
var uri = new Uri($@"https://www.example.com/{id}").AbsoluteUri;
var req = new HttpRequestMessage(HttpMethod.Post, uri);
Мой объект uri содержит https://www.example.com/%22MyId%22, что правильно.
Проверка req.RequestUri показывает правильное значение для каждого свойства, кроме LocalPath, все остальное, кажется, имеет правильную %22 закодированную цитату.
Затем я отправляю запрос:
await httpClient.SendAsync(req)
и он делает запрос к https://www.example.com/"MyId" (больше не закодирован?), И запрос терпит неудачу.
uri.UserEscaped показывает false после создания. Я попытался экранировать весь URI, используя Uri.EscapeUriString, но эта функция устарела и предлагает использовать Uri.EscapeDataString для запроса (что я уже делаю).
Я следовал решению проблемы GitHub в этого вопроса, однако это не решило мою проблему (используя AbsoluteUri).
Этот вопрос неверен, так как это не просто метод ToString(), фактический запрос включает в себя декодированные значения.
Этот вопрос просто мертвая ссылка.
Как я могу отправить свой запрос с закодированными значениями цитаты %22?





вы можете использовать их (пространство имен System.Web)
HttpUtility.UrlDecode("")
HttpUtility.UrlEncode("")
Не делайте этого Uri.EscapeDataString, просто включите id как есть в Uri.
var id = "\"MyId\"";
var uri = new Uri($@"https://www.example.com/{id}").AbsoluteUri;
var req = new HttpRequestMessage(HttpMethod.Post, uri);
Fiddler показывает, что ниже был сделан запрос.
POST https://www.example.com/%22MyId%22
Использование
HttpUtility.UrlEncodeдает те же результаты, запрос по-прежнему выполняется с декодированными кавычками.