设置 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?

第二个问题,使用这两种语法创建的请求是否有任何区别:

为了安全起见,我需要将参数作为表单数据提交。

感谢您的帮助。

我认为 POST 请求不可能作为 GET 执行。考虑到您有一些代码(不是您问题中的代码)可以做到这一点。当您在 RestRequest 构造函数中显式设置请求类型时,即使使用 ExecutePost 也是多余的。

关于第二个问题,没有本质区别。默认参数类型为 GetOrPost。我也相信我们在没有 JSON 或 XML 正文的情况下默认对 POST 请求使用 multipart/form-data

看RestSharp的代码就可以轻松找到

虽然很奇怪,但我也遇到过类似的问题。

我的解决方案是使用 ExecuteAsPost():

var response = client.ExecuteAsPost(request, "POST");