设置 ParameterType=GetOrPost 时的 Restsharp 参数行为
Restsharp parameter behavior when setting ParameterType=GetOrPost
我在使用 RestSharp 时遇到了一个奇怪的间歇性问题。我用它向服务器提交 POST 身份验证请求。但是在我还不能隔离的某些条件下,这个身份验证调用失败了。通过查看服务器日志,我看到了 GET 请求而不是 POST。我真的很想知道这到底是怎么可能的。
这是提交身份验证请求的代码:
var client = new RestClient(m_baseUrl);
var request = new RestRequest("https://dummyserver.com/api/auth", Method.POST);
request.AddParameter("client_id", apiCredentials.ApiKey, ParameterType.GetOrPost);
request.AddParameter("client_secret", apiCredentials.ApiSecret, ParameterType.GetOrPost);
request.AddHeader("Content-Type", "multipart/form-data");
IRestResponse response = await client.ExecutePostTaskAsync(request);
由于它是一个分布式应用程序,我没有太多关于客户端请求的信息。遥测只是确认身份验证失败。
RestSharp 是否可能(已知错误)将此请求转换为 GET?
第二个问题,使用这两种语法创建的请求是否有任何区别:
- request.AddParameter("client_id", apiCredentials.ApiKey, ParameterType.GetOrPost);
- request.AddParameter("client_id", apiCredentials.ApiKey);
为了安全起见,我需要将参数作为表单数据提交。
感谢您的帮助。
我认为 POST
请求不可能作为 GET
执行。考虑到您有一些代码(不是您问题中的代码)可以做到这一点。当您在 RestRequest
构造函数中显式设置请求类型时,即使使用 ExecutePost
也是多余的。
关于第二个问题,没有本质区别。默认参数类型为 GetOrPost
。我也相信我们在没有 JSON 或 XML 正文的情况下默认对 POST
请求使用 multipart/form-data
。
看RestSharp的代码就可以轻松找到
虽然很奇怪,但我也遇到过类似的问题。
我的解决方案是使用 ExecuteAsPost():
var response = client.ExecuteAsPost(request, "POST");
我在使用 RestSharp 时遇到了一个奇怪的间歇性问题。我用它向服务器提交 POST 身份验证请求。但是在我还不能隔离的某些条件下,这个身份验证调用失败了。通过查看服务器日志,我看到了 GET 请求而不是 POST。我真的很想知道这到底是怎么可能的。
这是提交身份验证请求的代码:
var client = new RestClient(m_baseUrl);
var request = new RestRequest("https://dummyserver.com/api/auth", Method.POST);
request.AddParameter("client_id", apiCredentials.ApiKey, ParameterType.GetOrPost);
request.AddParameter("client_secret", apiCredentials.ApiSecret, ParameterType.GetOrPost);
request.AddHeader("Content-Type", "multipart/form-data");
IRestResponse response = await client.ExecutePostTaskAsync(request);
由于它是一个分布式应用程序,我没有太多关于客户端请求的信息。遥测只是确认身份验证失败。
RestSharp 是否可能(已知错误)将此请求转换为 GET?
第二个问题,使用这两种语法创建的请求是否有任何区别:
- request.AddParameter("client_id", apiCredentials.ApiKey, ParameterType.GetOrPost);
- request.AddParameter("client_id", apiCredentials.ApiKey);
为了安全起见,我需要将参数作为表单数据提交。
感谢您的帮助。
我认为 POST
请求不可能作为 GET
执行。考虑到您有一些代码(不是您问题中的代码)可以做到这一点。当您在 RestRequest
构造函数中显式设置请求类型时,即使使用 ExecutePost
也是多余的。
关于第二个问题,没有本质区别。默认参数类型为 GetOrPost
。我也相信我们在没有 JSON 或 XML 正文的情况下默认对 POST
请求使用 multipart/form-data
。
看RestSharp的代码就可以轻松找到
虽然很奇怪,但我也遇到过类似的问题。
我的解决方案是使用 ExecuteAsPost():
var response = client.ExecuteAsPost(request, "POST");