Comment puis-je appeler un service web à partir de C# avec HTTP POST
je veux écrire une Classe c # qui créerait une connexion à un service web courant vers www.temp.com, envoyer 2 params de chaîne de caractères à la méthode DoSomething et obtenir le résultat de chaîne de caractères. Je ne veux pas utiliser wsdl. Comme je connais les params du webservice, je veux juste faire un simple appel.
je suppose qu'il devrait y avoir un moyen simple et facile de le faire dans .Net 2, mais je n'ai pas pu trouver d'exemple...
4 réponses
si ce "webservice" est un simple accès HTTP, vous pouvez utiliser WebRequest:
WebRequest request = WebRequest.Create("http://www.temp.com/?param1=x¶m2=y");
request.Method="GET";
WebResponse response = request.GetResponse();
à Partir de là, vous pouvez regarder réponse.Getrespononsestream pour la sortie. Vous pouvez frapper un service postal de la même façon.
cependant, si c'est un service Web de savon, ce n'est pas aussi facile. En fonction de la sécurité et des options du service Web, parfois vous pouvez prendre une requête déjà formée et l'utiliser comme un modèle-remplacer les valeurs param et l'envoyer (en utilisant webrequest), puis analyser la réponse du savon manuellement... mais dans ce cas, vous êtes à la recherche de beaucoup de travail supplémentaire et peut aussi bien utiliser wsdl.exe
pour générer des procurations.
j'envisagerais d'utiliser ASP.NET MVC pour votre service web. Vous pouvez fournir des paramètres via les paramètres de formulaire standard et retourner le résultat sous forme de JSON.
[HttpPost]
public ActionResult MyPostAction( string foo, string bar )
{
...
return Json( new { Value = "baz" } );
}
dans votre client, utilisez la HttpWebRequest
var request = WebRequest.Create( "/controller/mypostaction" );
request.Method = "POST";
var data = string.Format( "foo={0}&bar={1}", foo, bar );
using (var writer = new StreamWriter( request.GetRequestStream() ))
{
writer.WriteLine( data );
}
var response = request.GetResponse();
var serializer = new DataContractJsonSerializer(typeof(PostActionResult));
var result = serializer.ReadObject( response.GetResponseStream() )
as PostActionResult;
vous avez
public class PostActionResult
{
public string Value { get; set; }
}
une autre façon d'appeler la méthode POST, j'ai utilisé pour appeler la méthode POST dans WebAPI.
WebClient wc = new WebClient();
string result;
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
result = wc.UploadString("http://localhost:23369/MyController/PostMethodName/Param 1/Param 2","");
Response.Write(result);
Vous pouvez retourner l'objet List en utilisant Newtonsoft.Json:
WebClient wc = new WebClient();
string result;
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
var data = string.Format("Value1={0}&Value2={1}&Value3={2}", "param1", "param2", "param3");
result = wc.UploadString("http:your_services", data);
var ser = new JavaScriptSerializer();
var people = ser.Deserialize<object_your[]>(result);