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...

17
demandé sur Stavros 2010-10-10 16:55:34

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&param2=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.

21
répondu Philip Rieck 2010-10-10 13:08:24

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; }
}
11
répondu tvanfosson 2010-10-10 18:07:11

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);
3
répondu Prateek-Systematix 2015-07-05 10:16:12

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);
1
répondu Tran Anh Hien 2016-12-25 11:59:38