C# .NET中的URL编码URI

C# .NET中的URL编码URI,c#,.net,windows-phone,windows-phone-8.1,C#,.net,Windows Phone,Windows Phone 8.1,我正在尝试通过Windows Phone 8.1应用程序中的发出web请求。web请求包含一组搜索词,在构建请求签名时,这些搜索词按百分比编码为:OAuthTools.UrlEncodeStrict(searchTerms),这是因为搜索词可能包含空格。然后我添加所有其他参数,并生成一个签名。请求URL将如下所示: http://platform.fatsecret.com/rest/server.api?format=json&max_results=10&method=rec

我正在尝试通过Windows Phone 8.1应用程序中的发出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\u expression=pumpking%20pie
的编码正确。但是,当将此URL放入URI对象时(根据方法要求),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
删除
搜索表达式
参数的转义间距。在本例中,这会导致无效的OAuth签名(随着参数的更改),但使用带空格的未转义搜索表达式也会导致无效的OAuth签名(我假设,因为REST参数不应包含空格)。有没有办法确保URI类不会解码我的URL字符串?我发现解决方法包括:

<uri>
  <schemeSettings>
    <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
  </schemeSettings>
</uri>


在Web.config或App.config文件中。但是,似乎没有合适的配置文件将其放在Windows Phone 8.1开发环境中(我已尝试将其添加到packages.config和应用程序清单中,两者都没有任何效果)。这个问题还有别的解决办法吗?或者,是否有另一种方法可以使用原始字符串发送web请求,而不是通过URI对象发送?

这看起来是一个不错的解决方案,您如何知道它被错误编码?当您创建
Uri
时,
Uri.AbsoluteUri
给了您什么?嗯,好的,所以问题似乎在别处。绝对URI是正确的,但是我仍然得到一个无效的OAuth签名错误(这对于没有空格的搜索很好)。@user3750097您确定应该对转义的表示进行签名吗?@spender据我所知,是的。这些状态用于对签名库进行编码,并且对于单个搜索项来说,它非常有效。我将尝试在不转义搜索表达式的情况下进行检查。