2017-08-24 2 views
0

Je me demandais comment faire un post d'un serveur json à un serveur http. Le code que je utilise pour faire JSON est la suivante:Comment publier json dans le serveur HTTP

pedro product = new pedro(); 
        product.FirtsName = "Ola"; 
        product.ID = 1; 
        product.idade= 10; 


        string json = JsonConvert.SerializeObject(product); 

Et voici la pedro classe:

public class pedro 
    { 
     public int ID { get; set; } 
     public string FirtsName { get; set; } 
     public int idade { get; set; } 
    } 
+0

Vous pouvez utiliser [RestSharp] (http://restsharp.org/) –

+1

Copie possible de [Comment publier JSON sur le serveur?] (Https://stackoverflow.com/questions/9145667/how-to- post-json-to-the-server) –

+0

Convertir le JSON en une chaîne puis base64 la chaîne, vous devez ensuite décoder base64 les données sur le serveur et convertir en un objet .... son son plus compliqué que c'est et ne nécessite que deux appels de fonction à chaque extrémité. – SPlatten

Répondre

0

Avec WebAPI, vous pouvez utiliser quelque chose comme ceci:

string url = "http://url.of.server/"; 
Pedro product = new Pedro(); 
product.FirtsName = "Ola"; 
product.ID = 1; 
product.Idade = 10; 

using (var client = new HttpClient()) 
{ 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     HttpResponseMessage response = client.PostAsJsonAsync(url, product).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      // do something 
     } 
} 

Si vous n'utilisez pas WepApi, il existe de nombreuses méthodes similaires, par exemple: https://stackoverflow.com/a/39414248/7489072

Base64 ne pas coder le corps de votre message, comme suggéré dans les commentaires, sauf si vous devez absolument/vouloir publier des fichiers binaires ET avoir le contrôle sur le serveur web de réception. Les serveurs Web dans 99% des cas attendent un corps de texte brut. Si vous devez publier des caractères en dehors de la plage ASCII, utilisez les en-têtes HTTP appropriés pour spécifier une charge de corps Unicode.

Update 1 (en-têtes): La classe HttpClient a DefaultRequestHeaders de propriétés qui peuvent être utilisés pour définir les en-têtes de requêtes communes, comme AcceptEncoding. Si vous avez besoin d'un contrôle à grain plus fin des en-têtes de contenu, utilisez .PostAsync (string uri, contenu HttpContent) au lieu de .PostAsJsonAsync (qui définit juste quelques têtes par défaut pour le contenu JSON)

using (var client = new HttpClient()) 
{ 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     string stringFromObject = JsonConvert.SerializeObject(product); 
     HttpContent content = new StringContent(stringFromObject, Encoding.UTF8, "application/json"); 
     content.Headers.Add("YourCustomHeader", "YourParameter"); 

     HttpResponseMessage response = client.PostAsync(url, content).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      // do something 
     } 
} 

Mise à jour 2 (codage): Pour en savoir plus sur les commentaires de codage: vous devez bien sûr échapper les guillemets et les goûts. Mais cela fait partie de la norme JSON et devrait être manipulé par des encodeurs/décodeurs communs. En plus de cela, vous pouvez utiliser tout autre codage pour les propriétés de votre objet sérialisé. Par exemple HTML-encoding sur les chaînes et Base64 sur les propriétés binaires. Tant que vous savez que le serveur Web le reçoit, il le décodera correctement.

{ 
    "id": 3, 
    "title": "Decode this", 
    "description": "this is < HTML encoded >", 
    "profileImgBase64": "Nzg5MzQ4IHdleWhmQVMmKihFJiphc3R5WUdkdCphc14qVHlpZg0K" 
} 

Ainsi encode propriétés individuelles, mais ne codent pas toute la charge utile JSON, comme vous devez le décoder au début du pipeline de réception et il est tout simplement pas webservers quelque chose comprendront.

+0

Comment puis-je ajouter des en-têtes à votre code? ? –

+0

HttpClient.DefaultRequestHeaders possède de nombreuses propriétés prédéfinies pour les en-têtes de requête les plus courants. Par exemple. HttpClient.DefaultRequestHeaders.AcceptEncoding Si vous devez définir plusieurs en-têtes de requête, utilisez .PostAsync (chaîne uri, contenu HttpContent) et définissez les en-têtes de contenu. –

+0

Pouvez-vous mettre à jour votre réponse avec un exemple d'en-tête? –