2010-10-10 20 views
17

我想編寫一個ac#類,它將創建一個連接到運行到www.temp.com的web服務的連接,向方法DoSomething發送2個字符串參數並獲取字符串結果。 我不想使用wsdl。既然我知道web服務的參數,我只想做一個簡單的調用。如何從C#使用HTTP POST調用webservice

我想應該有一個容易和簡單的方法來做到這一點。NET中2,但我找不到任何例子...

+1

這是您的網絡服務?你可以使用JSON或純XML而不是SOAP來執行RESTful服務嗎? – tvanfosson 2010-10-10 12:59:19

+0

@tvanfosson是的,這是我的web服務。我如何用JSON做一個REST風格的web服務? – Stavros 2010-10-10 13:20:20

回答

20

如果這個「Web服務」是一個簡單的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來生成代理。

+1

這看起來像我需要的東西。如何將方法名稱(DoSomething)添加到此調用中? – Stavros 2010-10-10 13:30:58

+0

好吧,在玩過一些遊戲後,我設法找到了使用Post製作所需的額外內容。謝謝 – Stavros 2010-10-10 14:30:53

+0

如果我想提交一些額外的數據到網絡服務,那麼我打電話,然後我做我想做的? – Madhav 2017-07-05 09:34:29

10

我會探討使用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; } 
} 
+0

感謝您的信息,但我已經在沒有Json的情況下實現了它。下一次我會對此進行體驗。 – Stavros 2010-10-12 11:21:41

3

一種方法調用POST方法,我用來調用POST方法的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); 
1

您可以返回列表對象使用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); 
相關問題