【问题标题】:why RestSharp Request method Change from POST to GET?为什么 RestSharp 请求方法从 POST 更改为 GET?
【发布时间】:2017-02-15 11:47:41
【问题描述】:

我正在使用 RestSharp 将一些数据发布到 url。我正在使用提琴手监视此操作。当我在此代码中使用 Simple .net HttpClient 时:

using (var client = new HttpClient())
        {
            var values = new Dictionary<string, string>  {
                { "par1", "1395/11/29" },
                { "par2", "2" }};
            var content = new FormUrlEncodedContent(values);
            var response = await client.PostAsync("http://someurl.com/resource", content);
            var responseString = await response.Content.ReadAsStringAsync();
}

一切都很好,这会返回真实的结果。但是当我尝试将 RestSharp 与此代码一起使用时:

 RestSharp.RestRequest request = new RestSharp.RestRequest("/resource");
 request.AddParameter("par1", val, RestSharp.ParameterType.RequestBody);
 request.AddParameter("par2", val, RestSharp.ParameterType.RequestBody);
 request.AddHeader("Origin", "http://someurl.com");
 request.Method = RestSharp.Method.POST;
 RestSharp.RestClient client = new RestSharp.RestClient("http://someurl.com");
 var response = client.Execute(request);

那么 fiddler 向我展示通过 GET 方法而不是 POST 发送的请求?

我再次检查了我的提琴手,发现了这个问题:

内容类型:par1

为什么这会发生在我身上?

【问题讨论】:

  • 这是一个愚蠢的错误。我使用的是“http”而不是“https”,这没有在远程主机中处理。 :)

标签: c# restsharp dotnet-httpclient


【解决方案1】:

将您的 ParameterType 参数更改为 GetOrPost,它将起作用

request.AddParameter("par1", val, RestSharp.ParameterType.GetOrPost);
request.AddParameter("par2", val, RestSharp.ParameterType.GetOrPost);

【讨论】:

  • 我这样做了,但没有发生任何变化,我的请求监控为 GET
【解决方案2】:
  1. 使用 JSON 将请求初始化为 POST。

    var client = new RestClient(PreUri);

    var request = new RestRequest(Uri, Method.POST) {RequestFormat = DataFormat.Json};

  2. 在正文中添加对象

    request.AddBody(obj);

  3. 执行

    var cancelTokenSource = new CancellationTokenSource();

    var response = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);

【讨论】:

  • 我必须以 application/x-www-form-urlencoded 格式向服务器发送数据
【解决方案3】:

我愚蠢地错误地调用“client.Get”而不是“client.Post”。可能这篇文章对其他人有帮助。

var client = new RestClient("https://someservice.com");
var request = new RestRequest("/token/", Method.POST, DataFormat.Json).AddJsonBody(SomeObject);
var response = client.Get(request);

我期待这段代码发出 POST 请求。因为我将它指定为 Method.POST。 但几个小时后,我看到了我的错误。是的,我正在指定方法。但就在我调用 client.Get(request);这会将方法更改为 GET。 所以,正确使用 POST 请求的方式如下:

var client = new RestClient("https://someservice.com");
var request = new RestRequest("/token/", DataFormat.Json).AddJsonBody(SomeObject);
var response = client.Post(request);

【讨论】:

  • 请不要以第一人称发帖,这会让您看起来像是傀儡帐户上的 OP
猜你喜欢
  • 2012-01-13
  • 2023-02-23
  • 2015-08-06
  • 2021-01-29
  • 2017-06-05
  • 2018-01-10
  • 1970-01-01
  • 2021-09-02
  • 2023-01-11
相关资源
最近更新 更多