2

我正在使用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 本身以及随附的许多示例都以上述方式使用它,这让我相信我可能错了。

谁能证实我的发现或解释为什么我走错了路?

4

1 回答 1

0

你的发现是有道理的。

由于您首先解码,因此编码的 & 符号 (%3D) 成为键/值对分隔符。路径组件也是如此。斜杠 (%2f) 成为路径分隔符,并被解析。

于 2017-01-14T01:48:31.717 回答