Voici le code que j'ai jusqu'à présent:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;
namespace ConsoleProgram
{
public class Class1
{
private const string URL = "https://sub.domain.com/objects.json?api_key=123";
private const string DATA = @"{""object"":{""name"":""Name""}}";
static void Main(string[] args)
{
Class1.CreateObject();
}
private static void CreateObject()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = DATA.Length;
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
requestWriter.Write(DATA);
requestWriter.Close();
try {
WebResponse webResponse = request.GetResponse();
Stream webStream = webResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
string response = responseReader.ReadToEnd();
Console.Out.WriteLine(response);
responseReader.Close();
} catch (Exception e) {
Console.Out.WriteLine("-----------------");
Console.Out.WriteLine(e.Message);
}
}
}
}
Le problème est que je pense que le bloc d'exception est déclenché (parce que lorsque je supprime le try-catch, j'obtiens un message d'erreur de serveur (500). Mais je ne vois pas la console.
Ma console:
The thread 'vshost.NotifyLoad' (0x1a20) has exited with code 0 (0x0).
The thread '<No Name>' (0x1988) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0x1710) has exited with code 0 (0x0).
'ConsoleApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'c:\users\l. preston sego iii\documents\visual studio 11\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe', Symbols loaded.
'ConsoleApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
A first chance exception of type 'System.Net.WebException' occurred in System.dll
The thread 'vshost.RunParkingWindow' (0x184c) has exited with code 0 (0x0).
The thread '<No Name>' (0x1810) has exited with code 0 (0x0).
The program '[2780] ConsoleApplication1.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[2780] ConsoleApplication1.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).
J'utilise Visual Studio 2011 Beta et .NET 4.5 Beta.
Réponses:
L'API Web ASP.Net a remplacé l'API Web WCF mentionnée précédemment.
Je pensais que je publierais une réponse mise à jour car la plupart de ces réponses datent du début de 2012, et ce fil est l'un des meilleurs résultats lorsque vous effectuez une recherche Google pour "appeler le service reposant c #".
Les conseils actuels de Microsoft consistent à utiliser les bibliothèques clientes de l'API Web Microsoft ASP.NET pour consommer un service RESTful. Il est disponible en tant que package NuGet, Microsoft.AspNet.WebApi.Client. Vous devrez ajouter ce package NuGet à votre solution.
Voici à quoi ressemblerait votre exemple lorsqu'il serait implémenté à l'aide de la bibliothèque cliente de l'API Web ASP.Net:
Si vous prévoyez d'effectuer plusieurs demandes, vous devez réutiliser votre instance HttpClient. Voir cette question et ses réponses pour plus de détails sur les raisons pour lesquelles une instruction using n'a pas été utilisée sur l'instance HttpClient dans ce cas: HttpClient et HttpClientHandler doivent-ils être supprimés?
Pour plus de détails, y compris d'autres exemples, allez ici: http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
Cet article de blog peut également être utile: http://johnnycode.com/2012/02/23/consuming-your-own-asp-net-web-api-rest-service/
la source
ReadAsAsync()
, ajoutez une référence àSystem.Net.Http.Formatting.dll
. (Intuitif, non?)Ma suggestion serait d'utiliser RestSharp . Vous pouvez appeler des services REST et les faire transtyper en objets POCO avec très peu de code passe-partout pour avoir à analyser la réponse. Cela ne résoudra pas votre erreur particulière, mais répond à votre question générale sur la façon d'appeler les services REST. Devoir changer votre code pour l'utiliser devrait être payant dans la facilité d'utilisation et la robustesse à l'avenir. C'est juste mes 2 cents cependant
Exemple:
la source
Indépendant, j'en suis sûr, mais enveloppez vos
IDisposable
objets dans desusing
blocs pour assurer une élimination appropriée:la source
Voici quelques façons différentes d'appeler une API externe en C # (mise à jour 2019).
Les moyens intégrés de .NET:
Packages NuGet gratuits et open source , qui ont franchement une bien meilleure expérience de développeur que les clients intégrés de .NET:
Tous les packages ci-dessus offrent une excellente expérience de développeur (c'est-à-dire une API concise et facile) et sont bien entretenus.
(*) en août 2019
Exemple: Obtention d'un élément Todo à partir d'une API Fake Rest à l'aide de ServiceStack.Text. Les autres bibliothèques ont une syntaxe très similaire.
L'exécution de l'exemple ci-dessus dans une application .NET Core Console produit la sortie suivante.
Installez ces packages à l'aide de NuGet
la source
Veuillez utiliser le code ci-dessous pour votre demande d'api REST
la source
Je souhaite partager ma solution dans ASP.NET Core
Pour publier, utilisez quelque chose comme ceci:
Exemple de suppression:
Exemple pour obtenir la liste:
Exemple pour en obtenir un seul:
la source
Mise à jour pour appeler une API REST lors de l'utilisation de .NET 4.5 ou .NET Core
Je suggère DalSoft.RestClient (mise en garde, je l'ai créé). La raison étant qu'il utilise la saisie dynamique, vous pouvez tout terminer en un seul appel fluide, y compris la sérialisation / désérialisation. Voici un exemple de PUT fonctionnel:
la source
AVOIR:
PUBLIER:
Remarque: Pour sérialiser et désirer JSON, j'ai utilisé le package Newtonsoft.Json NuGet.
la source
Consultez Refit pour passer des appels aux services de repos à partir de .net. Je l'ai trouvé très facile à utiliser: https://github.com/paulcbetts/refit
la source
Ceci est un exemple de code qui fonctionne à coup sûr. Cela m'a pris un jour pour faire ceci pour lire un ensemble d'objets du service Rest:
RootObject est le type de l'objet que Im lit à partir du service de repos.
la source
la source
Je l'ai fait de cette manière simple, avec le Web Api 2.0. Vous pouvez supprimer UseDefaultCredentials.Je l'ai utilisé pour mes propres cas d'utilisation.
la source
Puisque vous utilisez Visual Studio 11 Beta, vous souhaiterez utiliser la dernière et la meilleure. Le nouveau Web Api contient des classes pour cela.
Voir HttpClient: http://wcf.codeplex.com/wikipage?title=WCF%20HTTP
la source
La réponse indiquée ici suggère d'utiliser directement HttpClient et de le supprimer. Cela peut fonctionner, mais il est assez facile de rencontrer des problèmes avec HttpClient si vous ne l'utilisez pas correctement. Si vous allez utiliser HttpClient, vous feriez mieux de confier la création / suppression de HttpClients à une bibliothèque tierce qui utilise le modèle d'usine. RestClient.Net est une de ces bibliothèques.
Il est livré avec une usine HttpClient très basique afin que vous ne rencontriez pas le problème d'épuisement de socket,
Mais l'implémentation IHttpClientFactory de Microsoft peut également être utilisée pour la dernière et la meilleure:
RestClient.Net prend en compte l'injection de dépendances, la moquerie, les conteneurs IoC, la testabilité des unités, et surtout est rapide. J'ai cherché et le seul autre client qui semble fonctionner à un niveau similaire est Flurl.Http
la source
La première étape consiste à créer la classe d'assistance pour le client http.
Ensuite, vous pouvez utiliser cette classe dans votre code.
ceci est un exemple de la façon dont vous appelez l'api de repos sans support en utilisant la classe ci-dessus.
c'est un exemple de la façon dont vous pouvez appeler les autres API qui nécessitent un support.
vous pouvez également vous référer au dépôt ci-dessous si vous voulez voir l'exemple de fonctionnement de la façon dont cela fonctionne.
https://github.com/mokh223/callApi
la source