9
votes

Consommez-vous API de .net

J'essaie de consommer une API de repos de mon application .NET. Ces API sont tous écrits en Java. On me demande de transmettre les informations d'identification de l'authentification aux en-têtes HTTP. Comment passer ces informations d'authentification comme «date», «autorisation» et «accepter» via des en-têtes HTTP.

Quelle classe dans .NET puis-je utiliser pour accomplir cette tâche? Quelqu'un peut-il m'aider avec ça?


0 commentaires

4 Réponses :


1
votes

Il y a plusieurs façons que vous puissiez le faire, mais utiliser les objets WebRequest est le plus rapide si vous n'avez que quelques appels à compléter.

Ce site a un excellent aperçu du processus.


5 commentaires

J'ai essayé d'utiliser la même classe HTTPWEBREQUEST et HTTPWEBRESPONSEPONSE pour envoyer la demande et obtenir une réponse respectivement. Mais maintenant, le problème est que je ne suis pas capable d'ajouter / définir l'en-tête de la date de httpwebrequest. Quand j'essaie de régler l'en-tête de la date. Je reçois une exception disant que cet en-tête doit être modifié en utilisant la propriété appropriée. Nom du paramètre: Nom. J'ai essayé de google une solution pour cela mais pas d'aller .. y a-t-il quelque chose que je puisse faire pour définir l'en-tête de date à httpwebrequest


On dirait que cela ne va pas fonctionner. social.msdn.microsoft .Com / Forums / FR-US / NetFXNetCom / Filetage / ... Je regarderais le commentaire de Darrel.


Comment puis-je modifier / régler l'en-tête de la date dans .NET HTTPQUEST? Quand j'essaie de le changer, je reçois une erreur.


Suite au lien que j'ai énuméré, cela n'est pas possible, il n'est pas pris en charge par le .NET Framework. Vous devriez faire rouler votre propre processus.


Comment créer mon propre processus de simulation de ce scénario. J'ai essayé avec tcpclient dans la classe System.net.Sockets. Mais je ne sais pas comment transmettre les en-teckclient. Y a-t-il d'autres pour y parvenir?



0
votes

Malgré son nom quelque peu trompeur, Services de données Ado.net (qui fait partie de .NET 3.5) contient des API pour exposer et consommer des services basés sur des repos. Dans votre cas, vous pouvez ignorer la pièce qui vous permet d'exposer des services et de vous concentrer sur la partie client.

Il prend en charge Linq et toutes sortes de bonté, vous permettant de poser votre service de repos comme celui-ci: P>

var selectedOrders = from o in context.Orders
                     where o.Freight > 30
                     orderby o.ShippedDate descending 
                     select o;


1 commentaires

Le problème avec l'exemple que vous donnez est que vous ne pouvez effectuer que la requête LINQ contre les points d'extrémité des services de données Ado.net. Vous ne pouvez pas faire cela contre d'autres points de fin de repos. L'OP ne sera pas capable de le faire contre ses API de Java.



13
votes

update

Cette bibliothèque a été remplacée par http://nuget.org/packages/microsoft.net.http/2.1.10


Utilisez la bibliothèque client Microsoft.HTTP qui est dans Kit de démarreur de WCF aperçu 2 .

Voici comment vous pourrait l'utiliser: xxx


9 commentaires

Même ici, je ne suis pas capable de définir / changer l'en-tête de la date.


Lorsque j'ai essayé de fixer l'en-tête de la date, je reçois une exception indiquant que «une exception s'est produite lors d'une demande WebClient.». Et j'ai essayé sans une en-tête de date, je reçois une erreur de 401 non autorisée comme celle-ci "Le serveur distant a renvoyé une erreur: (401) non autorisée.".


Mes excuses. J'ai creusé dans le code source pour httpclient et vous avez raison que le réglage de l'en-tête de date n'est pas pris en charge. Selon un commentaire dans le code, l'auteur ne sait pas comment le faire. J'ai supposé à tort que, car il y avait un accesseur défini sur la méthode qu'elle a été prise en charge. Apparemment, les auteurs de la bibliothèque ont l'intention de le soutenir.


Hmmm, bonnes nouvelles et mauvaises nouvelles. Apparemment, il est pris en charge dans .NET 4 msdn.microsoft.com/en-us/library/...


Darrel, est-il possible d'utiliser system.net.sockets.tcpclient pour envoyer et recevoir une demande à un serveur distant? Et surtout, est-il possible de passer les htt -aders à travers cette classe?


On supposerait que c'est possible. Au noyau, il ne s'agit que de texte sur une prise. Cependant, cela ressemble à beaucoup de travail pour obtenir un client pour dire au serveur quelle est la date. Êtes-vous absolument sûr que l'API Java exige que le client spécifie l'en-tête de date?


En juillet 2013, il semble que cela ne soit plus soutenu. Jetez un coup d'œil à RestShaarp ici: GITUB.COM/RESTSHARP/RESTSHARP


@Maxiwhate La version officielle publiée est ici Nuget.org/packages/microsoft.net. Http / 2.1.10


Great, merci Darrel pour la mise à jour, je n'ai pas trouvé la nouvelle version quand je cherchais



4
votes

Juste pour ajouter un peu de valeur à ce fil (Moi aussi, je cherchais un moyen de consommer un service reposant et de fournir facilement des informations d'identification et de faire face à ce fil ... Je n'avais pas la "date" requise), Aaron Skonnard a écrit un excellent article sur l'utilisation du kit de démarreur de repos WCF appelé:

Guide du développeur sur le kit de démarreur de repos de WCF P>

Il existe une section très informative sur la manière de consommer un service reposant à l'aide de httpclient. Et voici l'extrait de code pour parler à Twitter: P>

HttpClient http = new HttpClient("http://twitter.com/statuses/");
http.TransportSettings.Credentials =
    new NetworkCredential("{username}", "{password}");
HttpResponseMessage resp = http.Get("friends_timeline.xml");
resp.EnsureStatusIsSuccessful();
ProcessStatuses(resp.Content.ReadAsStream());


0 commentaires