不要在RestSharp中编码参数

时间:2014-02-28 15:13:11

标签: restsharp

我正在使用RestSharp来访问RubyOnRails API。 您可能知道,当参数名称采用model_name[property]形式时,RoR会喜欢。另一方面,RestSharp不喜欢它。

Fiddler说我把它发送到服务器:

user%5Bemail%5D=user%40email.com&user%5Bpassword%5D=test

看起来R#在发送数据时对参数和值进行编码(与Curl不同,它看起来像是有选择地编码)。 虽然在大多数情况下我认为这很好,但在这种特殊情况下,它会使API返回401,因为它不了解参数。

是否可以要求R#不对请求的参数进行编码?

谢谢!

修改

好的,在R#源代码中,我找到了RestClient.EncodeParameters方法,所以看起来参数的名字总是被编码。我想我将不得不分叉:(

6 个答案:

答案 0 :(得分:5)

我知道这已经得到了解答,但我想补充一下这个答案,因为它对我有用。有一个(虽然是hacky)解决方案。为不应编码的参数构建自己的uri。

var uri = string.Concat("/path/to/your/api", "?paramThatShouldNotBeEncoded=", DateTime.Now.Date.AddDays(1).ToString("O"));
var restRequest = new RestRequest(uri, Method.GET);

答案 1 :(得分:4)

In the RestSharp sources我发现参数总是被编码(名称和值),所以我想如果我想添加一个额外的参数,我将不得不分叉。

答案 2 :(得分:2)

从RestSharp版本106.4.0开始,您只能在ParameterType.QueryStringWithoutEncode函数中使用request.AddParameter()

        request.AddParameter("user_id", @"45454545%6565%65", ParameterType.QueryStringWithoutEncode);

答案 3 :(得分:0)

更新:在大多数情况下,评论可能不起作用。

我找到了一个有趣的解决方案......只需解码您想要传入的参数,然后restsharp将编码回应该应该是什么。例如,我有一个使用%7的api密钥,RestSharper进一步对其进行编码。我解码了api密钥并将其传递给RestSharp,它似乎工作了!

答案 4 :(得分:0)

从项目站点查看此PR: https://github.com/restsharp/RestSharp/pull/1157

但是,据我所知,它尚未发布在NuGet上。

答案 5 :(得分:0)

这个解决方案对我有用

request.AddQueryParameter("sendEndDate", "string:data,something-else", false);

这是RestSharp.IRestRequest元数据中的函数:

IRestRequest AddQueryParameter(string name, string value, bool encode);