C'est juste un exemple de comment poster des données Json et obtenir des données Json vers/depuis une API Rest dans BIDS 2008 en utilisant System.Net.WebRequest et sans utiliser newtonsoft. Il s'agit simplement d'un code d'exemple et peut certainement être affiné (bien testé et fonctionne et sert mon objectif de test à merveille). C'est juste pour vous donner une idée. Je voulais ce fil mais je n'ai pas pu le trouver, donc je le publie. Ce sont mes principales sources à partir desquelles j'ai extrait ceci. Lien 1 et Lien 2
Code qui fonctionne(testé unitairement)
//Exemple de requête GET
var httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://abc.def.org/testAPI/api/TestFile");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "GET";
var username = "nomUtilisateurPourVotreAPI";
var password = "motDePassePourVotreAPI";
var bytes = Encoding.UTF8.GetBytes(username + ":" + password);
httpWebRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
var httpResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
Dts.Events.FireInformation(3, "résultat de la lecture du flux", result, "", 0, ref fireagain);
}
//Exemple de requête POST
var httpWebRequestPost = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://abc.def.org/testAPI/api/TestFile");
httpWebRequestPost.ContentType = "application/json";
httpWebRequestPost.Method = "POST";
bytes = Encoding.UTF8.GetBytes(username + ":" + password);
httpWebRequestPost.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
//DONNÉES POST newtonsoft n'a pas fonctionné avec BIDS 2008 dans ce package de test
//json https://stackoverflow.com/questions/6201529/how-do-i-turn-a-c-sharp-object-into-a-json-string-in-net
// remplir le modèle de fichier avec des données de test
CSharpComplexClass fileModel = new CSharpComplexClass();
fileModel.CarrierID = 2;
fileModel.InvoiceFileDate = DateTime.Now;
fileModel.EntryMethodID = EntryMethod.Manuel;
fileModel.InvoiceFileStatusID = FileStatus.NeedsReview;
fileModel.CreateUserID = "37f18f01-da45-4d7c-a586-97a0277440ef";
string json = new JavaScriptSerializer().Serialize(fileModel);
Dts.Events.FireInformation(3, "atteint du json", json, "", 0, ref fireagain);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
httpWebRequestPost.ContentLength = byteArray.Length;
// Obtenir le flux de demande.
Stream dataStream = httpWebRequestPost.GetRequestStream();
// Écrire les données dans le flux de demande.
dataStream.Write(byteArray, 0, byteArray.Length);
// Fermer l'objet Stream.
dataStream.Close();
// Obtenir la réponse.
WebResponse response = httpWebRequestPost.GetResponse();
// Afficher le statut.
//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
Dts.Events.FireInformation(3, "Afficher le statut", ((HttpWebResponse)response).StatusDescription, "", 0, ref fireagain);
// Obtenir le flux contenant le contenu renvoyé par le serveur.
dataStream = response.GetResponseStream();
// Ouvrir le flux en utilisant un StreamReader pour un accès facile.
StreamReader reader = new StreamReader(dataStream);
// Lire le contenu.
string responseFromServer = reader.ReadToEnd();
Dts.Events.FireInformation(3, "réponseDuServeur ", responseFromServer, "", 0, ref fireagain);
Références dans ma tâche de script de test à l'intérieur de BIDS 2008 (avec SP1 et le framework 3.5) ![entrer la description de l'image ici]()
1 votes
Rencontrez-vous des erreurs? À quoi ressemble votre
message
? Utilisez-vous une clé d'API appropriée?0 votes
@Drackir - J'utilise la bonne clé API (je l'ai testée avec une version e-mail de l'API et ça a fonctionné). Je ne reçois pas d'erreurs. Je ne reçois tout simplement pas de message texte. Le message est juste un texte de test simple ("test sms" (mais sans guillemets)).
1 votes
Où est votre réponse? Vous faites une demande mais vous n'utilisez pas GetResponseStream?
2 votes
@Vaccano, quelle version de C# utilisez-vous? Si vous utilisez la version 3.5/4.0, avez-vous jeté un œil sur le kit de démarrage WCF REST? Ils ont une classe HttpClient qui facilite l'appel aux services JSON (et autres). Vous n'avez pas à vous embêter avec les appels HttpWebRequest bruts, etc. Jetez un œil à ce document msdn.microsoft.com/en-us/library/ee391967.aspx faites défiler jusqu'à la section Consommer des services RESTful avec HttpClient (vers le bas).
0 votes
@Vaccano, en regardant la documentation SMS de Penny, ils ont exigé que le type de contenu soit text/json. Je ne suis pas sûr si cela va faire une différence mais tu devrais le changer dans ton code.
0 votes
@Shiv Kumar - Je ne savais pas que j'avais besoin d'une réponse (ou comment l'obtenir). Je suis nouveau dans tout ce qui concerne WebRequest. --- Je vais jeter un œil sur le kit de démarrage REST. C'est le seul appel json dans tout mon code, donc je ne voudrais pas ajouter trop d'infrastructure pour l'appeler. Si cela peut être fait sans trop d'ajouts à ma base de code alors je pense que j'aimerais cela. --- J'ai changé mon code pour utiliser text/json et cela n'a toujours pas fonctionné. Mais merci pour l'avertissement à ce sujet.
0 votes
@Shiv Kumar - une fois que j'ai ajouté un appel à request.GetResponse() dans le code, ça a très bien fonctionné! Merci pour le conseil (si vous le mettez comme réponse, je le sélectionnerai).