如何使用 RestSharp 发布请求
Posted
技术标签:
【中文标题】如何使用 RestSharp 发布请求【英文标题】:How to POST request using RestSharp 【发布时间】:2012-07-09 04:41:31 【问题描述】:我正在尝试使用 RestSharp 客户端发布请求,如下所示 我将验证码传递给以下函数
public void ExchangeCodeForToken(string code)
if (string.IsNullOrEmpty(code))
OnAuthenticationFailed();
else
var request = new RestRequest(this.TokenEndPoint, Method.POST);
request.AddParameter("code", code);
request.AddParameter("client_id", this.ClientId);
request.AddParameter("client_secret", this.Secret);
request.AddParameter("redirect_uri", "urn:ietf:wg:oauth:2.0:oob");
request.AddParameter("grant_type", "authorization_code");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
client.ExecuteAsync<AuthResult>(request, GetAccessToken);
void GetAccessToken(IRestResponse<AuthResult> response)
if (response == null || response.StatusCode != HttpStatusCode.OK
|| response.Data == null
|| string.IsNullOrEmpty(response.Data.access_token))
OnAuthenticationFailed();
else
Debug.Assert(response.Data != null);
AuthResult = response.Data;
OnAuthenticated();
但我收到 response.StatusCode = Bad Request。谁能帮助我如何使用 Restsharp 客户端发布请求。
【问题讨论】:
【参考方案1】:我的 RestSharp POST 方法:
var client = new RestClient(ServiceUrl);
var request = new RestRequest("/resource/", Method.POST);
// Json to post.
string jsonToSend = JsonHelper.ToJson(json);
request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json;
try
client.ExecuteAsync(request, response =>
if (response.StatusCode == HttpStatusCode.OK)
// OK
else
// NOK
);
catch (Exception error)
// Log
【讨论】:
字符串 jsonToSend = JsonHelper.ToJson(json);你能解释一下这条线吗? 它只是将对象转换为 json 字符串。 (json = 对象,jsonToSend = "json" 的 json 表示)。我应该改变那些名字。 如何将文件附加到您的请求中? 似乎 JsonHelper.ToJson() 不再可用。【参考方案2】:这种方式对我来说很好:
var request = new RestSharp.RestRequest("RESOURCE", RestSharp.Method.POST) RequestFormat = RestSharp.DataFormat.Json
.AddBody(BODY);
var response = Client.Execute(request);
// Handle response errors
HandleResponseErrors(response);
if (Errors.Length == 0)
else
希望这会有所帮助! (虽然有点晚了)
【讨论】:
Yours 是唯一适用于我的 node.js API 的。谢谢! 你没有定义客户端【参考方案3】:截至 2017 年,我发布到休息服务并从中获取结果:
var loginModel = new LoginModel();
loginModel.DatabaseName = "TestDB";
loginModel.UserGroupCode = "G1";
loginModel.UserName = "test1";
loginModel.Password = "123";
var client = new RestClient(BaseUrl);
var request = new RestRequest("/Connect?", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(loginModel);
var response = client.Execute(request);
var obj = JObject.Parse(response.Content);
LoginResult result = new LoginResult
Status = obj["Status"].ToString(),
Authority = response.ResponseUri.Authority,
SessionID = obj["SessionID"].ToString()
;
【讨论】:
截至现在/5/28/2019,您将使用 AddJsonBody 而不是 AddBody,因为您选择了 DataFormat.Json 而不是 XML。这既反对 JSON,又在一个语句中添加到请求的正文中。【参考方案4】:最好在发布您的回复后使用 json,如下所示
var clien = new RestClient("https://smple.com/");
var request = new RestRequest("index", Method.POST);
request.AddHeader("Sign", signinstance);
request.AddJsonBody(JsonConvert.SerializeObject(yourclass));
var response = client.Execute<YourReturnclassSample>(request);
if (response.StatusCode == System.Net.HttpStatusCode.Created)
return Ok(response.Content);
【讨论】:
【参考方案5】:我添加了这个辅助方法来处理返回我关心的对象的 POST 请求。
对于 REST 纯粹主义者,我知道,除了状态之外,POST 不应该返回任何东西。但是,我有大量 id 集合,对于查询字符串参数来说太大了。
辅助方法:
public TResponse Post<TResponse>(string relativeUri, object postBody) where TResponse : new()
//Note: Ideally the RestClient isn't created for each request.
var restClient = new RestClient("http://localhost:999");
var restRequest = new RestRequest(relativeUri, Method.POST)
RequestFormat = DataFormat.Json
;
restRequest.AddBody(postBody);
var result = restClient.Post<TResponse>(restRequest);
if (!result.IsSuccessful)
throw new HttpException($"Item not found: result.ErrorMessage");
return result.Data;
用法:
public List<WhateverReturnType> GetFromApi()
var idsForLookup = new List<int> 1, 2, 3, 4, 5;
var relativeUri = "/api/idLookup";
var restResponse = Post<List<WhateverReturnType>>(relativeUri, idsForLookup);
return restResponse;
【讨论】:
RestRequest.AddBody(object) 已过时:使用 AddXmlBody 或 AddJsonBody以上是关于如何使用 RestSharp 发布请求的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json 格式的有效负载附加到 RestSharp 请求中?
如何将 RestSharp 与 async/await 一起使用