2014-09-09 2 views
2

J'essaie de créer une application de console C# très simple pour publier des données dans une API web. Quoi que je fasse, j'obtiens une erreur sur la réponse comme:C# Console Application httpWebRequest

responseText "{\" info \ ": {\" status \ ": \" échec \ ", \" erreur \ ": {\" Code \ ": 1000, \" un message \ ": \" Invalid argument de la demande \ "}}}" string

Le api http://www.detrack.com/api-documentation/ est à la recherche d'un poste comme

https://app.detrack.com/api/v1/deliveries/view/all.json?key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&json= { "date": "2014-08-29"}

Je sais que l'utilisation de cette extension dans l'application de repos avancée chrome renvoie un résultat valide. Mais quand je tente la même chose via ce code de la console. J'ai une erreur!

Voici le code que j'ai dans mon application console.

using System; 
using System.Net; 
using System.IO; 

namespace ConsoleApplication1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://app.detrack.com/api/v1/deliveries/view/all.json?key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&"); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "json={\"date\":\"2014-08-28\"}"; 
      Console.WriteLine(json); 
      streamWriter.Write(json); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var responseText = streamReader.ReadToEnd(); 
      Console.WriteLine(responseText); 
      Console.ReadKey(); 

     } 


    } 
} 
} 

Toute aide/conseils serait vraiment apprécié

brendan

Répondre

0

Alors je regarde ceci:

string json = "json={\"date\":\"2014-08-28\"}"; 

Et selon la brève description qui est suivi de piste pas ce que vous voulez. Ils attendent un json valide et ce n'est pas le cas. Voici ce que vous devriez considérer valide json:

string json = "{\"date\":\"2014-08-28\"}"; 

Être averti Je ne sais pas à propos de votre évasion de citations. Je sérialiserais cela différemment; soit une classe fortement typée, soit une classe anonyme. Anon ressemblerait à ceci:

string json = JsonConvert.DeserializeObject(new { date = "2014-08-28" }); 

Abstraction faite des préoccupations au sujet du temps, les fuseaux horaires, utc, etc, qui sérialiser vos structures correctement. Voici un programme rêches de LINQPad:

void Main() 
{ 
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { date = "2014-08-28"}); 
    Console.WriteLine(json); 
} 

>>> {"date":"2014-08-28"} 
+0

Salut Jeff, merci pour vos commentaires. J'ai essayé d'utiliser vos options pour sérialiser json et je suis toujours en train de frapper un barrage routier. Je continue à me brancher. – user1517598

0

Vous pouvez essayer le code (non testé!) Ci-dessous.

using System; 
using System.Net; 
using System.IO; 

namespace ConsoleApplication1 { 
    class Program { 
     static void Main(string[] args) { 

      var webAddr = "https://app.detrack.com/api/v1/deliveries/create.json"; 

      var httpWebRequest = (HttpWebRequest) WebRequest.Create(webAddr); 

      httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 

      httpWebRequest.Method = "POST"; 

      string postData = "key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&json={""date"":""2014-08-28""}"; 

      byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

      httpWebRequest.ContentLength = byteArray.Length; 

      using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 

      { 

       streamWriter.Write(byteArray, 0, byteArray.Length); 

       streamWriter.Flush(); 

      } 

      var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse(); 

      using(var streamReader = new StreamReader(httpResponse.GetResponseStream())) 

      { 

       var result = streamReader.ReadToEnd(); 

       MessageBox.Show(result); 

      } 
     } 
    } 
} 
+0

Hi Dason, Merci d'avoir posté votre code. J'ai essayé, mais même avec quelques petites modifications, je peux l'obtenir pour poster, mais la réponse que je reçois n'inclut aucune donnée json valide. La réponse que je vois est ' { "info": { "status": "ok" } "Résultats": [] } ' – user1517598

+0

Avez-vous une solution si au lieu de JSON , Je veux référencer l'URL SFTP où un fichier csv est stocké? Veuillez me renvoyer ma question "http://stackoverflow.com/questions/35308945/accessing-sftp-url-from-console-application-using-c-sharp" –