如何使用RestSharp发送请求

我试图使用RestSharp客户端POST请求,如下所示我将Auth Code传递给以下函数

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(request, GetAccessToken); } } void GetAccessToken(IRestResponse 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(); } } 

但我得到了响应.StatusCode = Bad Request。 任何人都可以帮助我如何使用Restsharp客户端发布请求。

我的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 } 

这种方式适合我:

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

我添加了这个帮助器方法来处理我返回我关心的对象的POST请求。

对于REST纯粹主义者,我知道,除了状态之外,POST不应返回任何内容。 但是,我有一大堆id,它们对于查询字符串参数来说太大了。

帮手方法:

  public TResponse Post(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(restRequest); if (!result.IsSuccessful) { throw new HttpException($"Item not found: {result.ErrorMessage}"); } return result.Data; } 

用法:

  public List GetFromApi() { var idsForLookup = new List {1, 2, 3, 4, 5}; var relativeUri = "/api/idLookup"; var restResponse = Post>(relativeUri, idsForLookup); return restResponse; }