2012-07-09 16 views
21

ja próbuję POST żądanie przy użyciu klienta RestSharp następująco I m przechodzącą kod Sposób logowania do następujących funkcjiJak żądanie POST przy użyciu 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(); 
    } 
} 

ale jestem coraz response.StatusCode = Bad Request. Czy ktoś może mi pomóc, jak mogę POST wniosek za pomocą klienta Restsharp.

Odpowiedz

41

My RestSharp POST metoda:

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 
} 
+0

ciąg jsonToSend = JsonHelper.ToJson (json); Czy możesz wyjaśnić tę linię? –

+0

to po prostu przekształcić obiekt na ciąg json. (json = object, jsonToSend = json reprezentacja "json"). Powinienem zmienić te nazwiska. – David

+0

Jak załączyć plik do żądania? – OPV

10

ten sposób działa dobrze dla mnie:

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 
{ } 

Nadzieja to pomaga! (Chociaż jest to trochę późno)

+0

Twój jest jedynym, który działał dla mojego interfejsu API node.js. Dzięki! – coffekid

+1

nie zdefiniowałeś klienta –

3

Począwszy od 2017 roku zaksięgować do usługi odpoczynek i uzyskanie wyników z nim tak:

 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() 
     }; 
Powiązane problemy