C# 如何使用RestSharp发布请求
我试图使用RestSharp客户端发布请求,如下所示 我正在将身份验证代码传递给以下函数C# 如何使用RestSharp发布请求,c#,windows-phone-7,restsharp,C#,Windows Phone 7,Restsharp,我试图使用RestSharp客户端发布请求,如下所示 我正在将身份验证代码传递给以下函数 public void ExchangeCodeForToken(string code) { if (string.IsNullOrEmpty(code)) { OnAuthenticationFailed(); } else { var request = new RestRequest(this.TokenE
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();
}
}
public-void-ExchangeCodeForToken(字符串代码)
{
if(string.IsNullOrEmpty(代码))
{
OnAuthenticationFailed();
}
其他的
{
var request=new RestRequest(this.TokenEndPoint,Method.POST);
请求.添加参数(“代码”,代码);
request.AddParameter(“client_id”,this.ClientId);
request.AddParameter(“client_secret”,this.secret);
AddParameter(“重定向uri”,“urn:ietf:wg:oauth:2.0:oob”);
request.AddParameter(“授权类型”、“授权代码”);
request.AddHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
ExecuteAsync(请求,GetAccessToken);
}
}
void GetAccessToken(IRestResponse响应)
{
如果(response==null | | response.StatusCode!=HttpStatusCode.OK
||response.Data==null
||IsNullOrEmpty(response.Data.access_token))
{
OnAuthenticationFailed();
}
其他的
{
Assert(response.Data!=null);
AuthResult=response.Data;
OnAuthenticated();
}
}
但是我得到了响应。StatusCode=错误的请求。有谁能帮助我如何使用Restsharp客户端发布请求。我的Restsharp发布方法:
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
}
这种方式对我来说很好:
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
{ }
希望这有帮助!(虽然有点晚)从2017年开始,我发布到一个rest服务,并从中获得如下结果:
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()
};
我添加了这个helper方法来处理返回我关心的对象的POST请求 我知道,对于REST纯粹主义者来说,帖子不应该返回除状态之外的任何内容。但是,我有一个很大的ID集合,对于查询字符串参数来说太大了 助手方法:
public-treponse-Post(string-relativeUri,object-postBody),其中treponse:new()
{
//注意:理想情况下,不会为每个请求创建RestClient。
var restClient=新的restClient(“http://localhost:999");
var restRequest=新的restRequest(relativeUri,Method.POST)
{
RequestFormat=DataFormat.Json
};
restRequest.AddBody(postBody);
var结果=restClient.Post(restRequest);
如果(!result.issusccessful)
{
抛出新的HttpException($”未找到项:{result.ErrorMessage}”);
}
返回结果。数据;
}
用法:
公共列表GetFromApi()
{
var idsForLookup=新列表{1,2,3,4,5};
var relativeUri=“/api/idLookup”;
var Response=Post(相对性,idsForLookup);
返回重响应;
}
最好在发布回复后使用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);
}
var clien=new RestClient(“https://smple.com/");
var请求=新的重新请求(“索引”,Method.POST);
请求。添加标题(“签名”,signinstance);
AddJsonBody(JsonConvert.SerializeObject(yourclass));
var response=client.Execute(请求);
if(response.StatusCode==System.Net.HttpStatusCode.Created)
{
返回Ok(response.Content);
}
string jsonToSend=JsonHelper.ToJson(json);你能解释一下这行吗?它只是将对象转换成json字符串。(json=object,jsonToSend=json表示“json”)。我应该更改这些名称。如何将文件附加到您的请求?您的文件是唯一适用于我的node.js API的文件。谢谢您在2019年5月28日之前没有定义ClientAs,您将使用AddJsonBody而不是AddBody,因为您选择了DataFormat.Json而不是XML。这会在一条语句中对JSON和请求体进行对象添加。RestRequest.AddBody(对象)已过时:使用AddXmlBody或AddJsonBody
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;
}
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);
}