restrequest restclient example consume c# windows-phone-7 restsharp

c# - restclient - Cómo realizar una solicitud POST utilizando RestSharp



restsharp web api c# (4)

Estoy tratando de PUBLICAR la solicitud usando el cliente RestSharp de la siguiente manera Estoy pasando el Código de autenticación a la siguiente función

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(); } }

Pero recibo respuesta.StatusCode = Solicitud incorrecta. ¿Alguien me puede ayudar para saber cómo PUBLICAR la solicitud utilizando el cliente de Restsharp?


A partir de 2017, publico en un servicio de descanso y obtengo los resultados así:

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() };


Agregué este método de ayuda para manejar mis solicitudes POST que devuelven un objeto que me importa.

Para los puristas de REST, lo sé, los POST no deben devolver nada además de un estado. Sin embargo, tenía una gran colección de identificadores que era demasiado grande para un parámetro de cadena de consulta.

Método de ayuda:

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

Uso:

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


De esta manera funciona bien para mí:

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

¡Espero que esto ayude! (Aunque es un poco tarde)


Método My 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 }