2017-10-16 6 views
1

Je veux utiliser REST api pour télécharger des commandes de mes sites magento.Demande REST fonctionne avec POSTMAN mais pas RestClient

J'ai utilisé le protocole https pour mon site Web. Lorsque vous demandez http, il est automatiquement converti en https.

Ma requête REST est assez simple, il suffit d'inclure un jeton dans l'en-tête de la requête http, la requête fonctionne bien avec POSTMAN, mais avec mon code C#, elle échoue de manière cohérente.

Ma bibliothèque RESTClient:

public class RestClient 
{ 
    public string EndPoint { get; set; } 
    public HttpVerb Method { get; set; } 
    public string ContentType { get; set; } 
    public string PostData { get; set; } 
    public string Accept { get; set; } 

    public RestClient(string endpoint, HttpVerb method, string postData, string contentType) 
    { 
     EndPoint = endpoint; 
     Method = method; 
     ContentType = contentType; 
     PostData = postData; 
    } 

     public string MakeRequest(string parameters, Dictionary<string, string> headers, 
     out HttpStatusCode httpStatusCode, out bool succeed) 
    { 
     httpStatusCode = HttpStatusCode.NotFound; 
     succeed = false; 

     var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters); 

     request.Method = Method.ToString(); 
     //request.ContentLength = 0; 
     request.ContentType = ContentType; 
     if (Accept!=null && Accept != "") 
      request.Accept = Accept; 

     foreach (var entry in headers) 
     { 
      request.Headers[entry.Key] = entry.Value; 
     } 

     if (!string.IsNullOrEmpty(PostData) && (Method == HttpVerb.POST || Method == HttpVerb.PUT)) 
     { 

      using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
      { 
       streamWriter.Write(PostData); 
      } 
     } 

     try 
     { 
      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       var responseValue = string.Empty; 
       httpStatusCode = response.StatusCode; 

       // grab the response 
       using (var responseStream = response.GetResponseStream()) 
       { 
        if (responseStream != null) 
        { 
         using (var reader = new StreamReader(responseStream)) 
         { 
          responseValue = reader.ReadToEnd(); 
         } 

        } 
       } 

       succeed = true; 
       return responseValue; 
      } 
     } 
     catch (WebException ex) 
     { 
      var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 
      return resp; 
     } 

     return ""; 
    } 

Mon code:

 Dictionary<string, string> headers = new Dictionary<string, string>(); 
     headers.Add("Authorization", String.Format("Bearer {0}", credential.Token)); 

     String url = String.Format("{0}/rest/V1/orders?" 
      +"searchCriteria[filter_groups][0][filters][0][field]=updated_at&" 
      +"searchCriteria[filter_groups][0][filters][0][value]={1}&" 
      +"searchCriteria[filter_groups][0][filters][0][condition_type]=from&" 
      +"searchCriteria[filter_groups][1][filters][0][field]=updated_at&" 
      +"searchCriteria[filter_groups][1][filters][0][value]={2}&" 
      +"searchCriteria[filter_groups][1][filters][0][condition_type]=to", 
      credential.WebsiteURL, 
      updateStart.ToString(), 
      updateEnd.ToString()); 

     RestClient client = new RestClient(url, HttpVerb.GET, "", "application/json"); 

     String respJson = null; 
     HttpStatusCode code = HttpStatusCode.NotFound; 
     bool succeed = false; 
     try 
     { 
      respJson = client.MakeRequest("", headers, out code, out succeed); 
     } 
     catch (Exception ex) 
     { 
     } 

-ce que quelqu'un a rencontré avant? Merci!

+2

essayer de poster votre code - tout comme c'est est pas un minimum, exemple complet et vérifiable https://stackoverflow.com/help/mcve –

+0

En ajoutant à la suggestion de @ ste-fu, postez votre code de requête REST, y compris les en-têtes que vous avez essayé d'ajouter, car le problème est généralement le jeton d'authentification. . –

+1

Comment échoue-t-il exactement? Erreur? Temps libre? Exception? – Mark

Répondre

0

Il semble que vous ne définissez jamais l'en-tête Accept n'importe où. Ceci est peu susceptible de causer une erreur non autorisée mais ce n'est pas votre api donc qui sait.

vous pouvez également envisager d'établir l'autorisation explicite en passant le jeton soit dans le constructeur ou la méthode MakeRequest, puis en utilisant

request.Headers.Add("Authorization", myAuthorizationToken);