我正在使用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方法,所以看起来参数的名字总是被编码。我想我将不得不分叉:(
答案 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);