Ich benutze den http Listener der C++ REST SDK 2.8 und bemerkte Folgendes. Wenn ich die folgende URL an diesem Hörer senden:URI Codierung in C++ REST SDK ("Casablanca")
http://my_server/my%2fpath?key=xxx%26yyy%3Dzzz
und ich mache:
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()));
dann finde ich, dass v_path_components 2 Elemente enthält [ "mein", "Pfad"], und m_query_components enthält 2 Paare [("key", "xxx"), ("yyy", "zzz")].
Was ich will, und wäre zu erwarten ist v_path_components 1 Element enthält [ "my/path"], und m_query_components 1 Paar enthalten [("Schlüssel", "xxx & yyy = zzz")] .
Damit letzteres zu erreichen, relative_uri sollte nicht dekodieren/encodieren die URI, da diese Informationen verliert. Außerdem sollte web :: uri :: decode() bei den Split-Ergebnissen und nicht vor der Aufteilung ausgeführt werden. Da das REST-SDK selbst sowie viele mit ihm ausgelieferte Samples dies auf die oben beschriebene Weise verwenden, führt es mich zu der Annahme, dass ich falsch liegen könnte.
Kann jemand meine Ergebnisse bestätigen oder erklären, warum ich auf dem Holzweg bin?