我试图通过Windows Phone 8.1应用程序中的WebClient发出Web请求。 Web请求包含一组搜索项,这些搜索项在构建请求签名时按百分比编码:OAuthTools.UrlEncodeStrict(searchTerms)
,这样做是因为搜索项可能包含空格。然后我添加所有其他参数,并生成签名。请求URL将如下所示:
http://platform.fatsecret.com/rest/server.api?format=json&max_results=10&method=recipes.search&oauth_consumer_key=******&oauth_nonce=ksoordxpd5oahp9e&oauth_signature=Uxq3pmkTkRrASO%2Bmoiujs24BtT4%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1420634671&oauth_version=1.0&page_number=0&search_expression=pumpkin%20pie
如您所见,最终参数search_expression=pumpkin%20pie
已正确编码。但是,将此URL放入URI对象时(如WebClient.DownloadStringAsync方法所要求的那样),URL将被解码为:
http://platform.fatsecret.com/rest/server.api?format=json&max_results=10&method=recipes.search&oauth_consumer_key=******&oauth_nonce=ksoordxpd5oahp9e&oauth_signature=Uxq3pmkTkRrASO%2Bmoiujs24BtT4%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1420634671&oauth_version=1.0&page_number=0&search_expression=pumpkin pie
删除search_expression
参数的转义间距。在这种情况下,这会导致无效的OAuth签名(随着参数更改),但使用带空格的未转义的search_expression也会导致无效的OAuth签名(我假设因为REST参数不应包含空格)。有没有办法确保URI类不解码我的URL字符串?我发现this answer解释了解决方法是包括:
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
</schemeSettings>
</uri>
Web.config或App.config文件内部。但是,似乎没有合适的配置文件将其置于Windows Phone 8.1开发环境中(我已尝试将其添加到packages.config和应用程序清单中,这两者都没有任何效果)。还有另一种解决这个问题的方法吗?或者,是否有另一种方法可以使用原始字符串发送Web请求,而不是通过URI对象?