Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用RestSharp发布请求_C#_Windows Phone 7_Restsharp - Fatal编程技术网

C# 如何使用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

我试图使用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();
    }
}
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);
   }