我正在使用C++ REST SDK 2.8 的 http 侦听器并注意到以下内容。如果我将以下 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"), ("yyy","zzz")]。
我想要并且期望的是v_path_components包含 1 个元素 ["my/path"],m_query_components包含 1 对 [("key","xxx&yyy=zzz")]。
为了实现后者,relative_uri不应解码/编码 uri,因为这会丢失信息。此外,web::uri::decode()应该在拆分结果上执行,而不是在拆分之前执行。但是,由于 REST SDK 本身以及随附的许多示例都以上述方式使用它,这让我相信我可能错了。
谁能证实我的发现或解释为什么我走错了路?