简体   繁体   English

为什么 RestSharp 请求方法从 POST 更改为 GET?

[英]why RestSharp Request method Change from POST to GET?

I am using RestSharp to post some data to a url.我正在使用 RestSharp 将一些数据发布到 url。 I am monitoring this operation using fiddler.我正在使用 fiddler 监视此操作。 when I use Simple .net HttpClient with this code:当我使用带有此代码的 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();
}

every thing is good and this return true result.一切都很好,这会返回真实的结果。 but when i try to use RestSharp with this code:但是当我尝试将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);

then fiddler show me the request sent by GET method instead of POST?然后提琴手向我展示通过 GET 方法而不是 POST 发送的请求?

I check another time my fiddler and found this issue:我又检查了一次我的提琴手,发现了这个问题:

Content-Type: par1内容类型:par1

why this is happening for me?为什么这会发生在我身上?

Change your ParameterType argument to GetOrPost and it will work将您的 ParameterType 参数更改为GetOrPost它将起作用

request.AddParameter("par1", val, RestSharp.ParameterType.GetOrPost);
request.AddParameter("par2", val, RestSharp.ParameterType.GetOrPost);
  1. Initialize Request as POST with JSON.使用 JSON 将请求初始化为 POST。

    var client = new RestClient(PreUri); var client = new RestClient(PreUri);

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

  2. Add object in body在正文中添加对象

    request.AddBody(obj); request.AddBody(obj);

  3. Execute执行

    var cancellationTokenSource = new CancellationTokenSource(); var CancellationTokenSource = new CancellationTokenSource();

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

I was stupidly doing mistake to call "client.Get" instead of "client.Post".我愚蠢地错误地调用了“client.Get”而不是“client.Post”。 May be this post helps other.可能是这篇文章对其他人有帮助。

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

I was expecting this code to make POST request.我期待此代码发出 POST 请求。 Because i specified it as Method.POST .因为我将它指定为Method.POST But after a few hours, i saw my mistake.但几个小时后,我看到了我的错误。 Yeas i was specifying the method.是的,我正在指定方法。 But just after i am calling client.Get(request) ;但就在我打电话给client.Get(request) 之后 This changes the metod to GET.这将方法更改为 GET。 So, the right way to use POST request is like follows:因此,使用 POST 请求的正确方法如下:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM