Я использую http-прослушиватель C++ REST SDK 2.8 и заметил следующее. Если я отправлю следующий URL-адрес этому слушателю:
http://my_server/my%2fpath?key=xxx%26yyy%3Dzzz
и я делаю:
auto uri = request.relative_uri();
auto v_path_components = web::uri::split_path(web::uri::decode(uri.path()));
auto m_query_components = web::uri::split_query(web::uri::decode(uri.query()));
затем я обнаружил, что v_path_components содержит 2 элемента ["my", "path"], а m_query_components содержит 2 пары [("key","xxx"), (" ууу", "zzz")].
Я хочу и ожидал, что v_path_components будет содержать 1 элемент ["my/path"] и m_query_components содержать 1 пару [("key","xxx&yyy= ззз")].
Чтобы добиться последнего, relative_uri не должен декодировать/кодировать uri, так как при этом теряется информация. Кроме того, web::uri::decode() следует выполнять для результатов разделения, а не перед разделением. Но, поскольку сам REST SDK, а также многие образцы, поставляемые с ним, используют это вышеописанным образом, это наводит меня на мысль, что я могу ошибаться.
Может ли кто-нибудь подтвердить мои выводы или объяснить, почему я на неправильном пути?