如何通过HTTP POST从C#调用Web服务

我想编写一个ac#类,它将创建一个连接到运行到www.temp.com的web服务,向方法DoSomething发送2个字符串参数并获取字符串结果。 我不想使用wsdl。 由于我知道网络服务的参数,我只是想做一个简单的电话。

我想在.Net 2中应该有一种简单易行的方法,但我找不到任何例子……

如果这个“webservice”是一个简单的HTTP GET,你可以使用WebRequest :

WebRequest request = WebRequest.Create("http://www.temp.com/?param1=x&param2=y"); request.Method="GET"; WebResponse response = request.GetResponse(); 

从那里你可以查看response.GetResponseStream的输出。 你可以用同样的方式点击POST服务。

但是,如果这是一个SOAP Web服务,那就不那么容易了。 根据webservice的安全性和选项,有时你可以采用已经形成的请求并将其用作模板 – 替换param值并发送它(使用webrequest),然后手动解析SOAP响应……但在这种情况下你正在寻找许多额外的工作,也可以使用wsdl.exe来生成代理。

我将探索使用ASP.NET MVC进行Web服务。 您可以通过标准表单参数提供参数,并将结果作为JSON返回。

 [HttpPost] public ActionResult MyPostAction( string foo, string bar ) { ... return Json( new { Value = "baz" } ); } 

在您的客户端中,使用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; 

你在哪里

 public class PostActionResult { public string Value { get; set; } } 

另一种调用POST方法的方法,我曾经在WebAPI中调用POST方法。

  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); 

您可以使用Newtonsoft.Json返回List对象:

 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(result);