不要在RestSharp中对参数进行编码

不要在RestSharp中对参数进行编码,restsharp,Restsharp,我正在使用RestSharp访问RubyOnRails API。 您可能知道,RoR喜欢参数名称采用model\u name[property]格式。另一方面,RestSharp不喜欢它 Fiddler说我把这个发送到服务器: user%5Bemail%5D=user%40email.com&user%5Bpassword%5D=test 它看起来像是在发送数据时对参数和值进行编码(不像Curl,它看起来是选择性编码)。 虽然我想大多数情况下这很好,但在这种特殊情况下,它会使API返回

我正在使用RestSharp访问RubyOnRails API。 您可能知道,RoR喜欢参数名称采用
model\u name[property]
格式。另一方面,RestSharp不喜欢它

Fiddler说我把这个发送到服务器:

user%5Bemail%5D=user%40email.com&user%5Bpassword%5D=test
它看起来像是在发送数据时对参数和值进行编码(不像Curl,它看起来是选择性编码)。 虽然我想大多数情况下这很好,但在这种特殊情况下,它会使API返回401,因为它不理解参数

是否可以要求R#不编码请求的参数

谢谢大家!

编辑


好的,在R#源代码中,我找到了RestClient.EncodeParameters方法,因此看起来参数的名称总是经过编码的。我想我必须分叉:(

我发现参数总是被编码的(名称和值),所以如果我想添加一个额外的参数,我想我必须分叉。

更新:在大多数情况下,可能无法从注释中工作


我发现了一个有趣的解决方案…只要解码你想要传递的参数,restsharp就会重新编码到它应该是什么样子。例如,我有一个api密钥,它使用了%7,RestSharper对它进行了进一步编码。我解码了api密钥并将其传递到restsharp,它似乎可以工作!

我知道这已经得到了回答,但是我想添加这个答案,因为它对我有用。有一个解决方案(尽管很粗糙)。为不应该编码的参数构建自己的uri

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

从项目现场查看此PR:

但是,据我所知,它还没有在NuGet上发布。

自RestSharp版本以来,您可以在
request.AddParameter()函数中使用
ParameterType.QueryStringWithoutEncode

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

这个解决方案对我有效

request.AddQueryParameter(“sendEndDate”,“字符串:数据,其他内容”,false);
这是
RestSharp.IRestRequest
元数据中的函数:

IRestRequest AddQueryParameter(字符串名称、字符串值、布尔编码);

这很不幸,这可能是一个边缘问题。我相信这是一个MapQuest API密钥的错误,我通过这样做解决了这个问题。更新的行号:这应该是公认的解决方案-自从106.4.0问世以来。是的,我想是的