2013-02-25 79 views
3

在這裏,我從我的Web應用程序調用Restful WCF服務,我不知道如何傳遞一個對象作爲參數。這裏是我的客戶端代碼:如何在HttpWebRequest POST中傳遞一個對象作爲參數?

protected void Button1_Click(object sender, EventArgs e) 
{ 
    UserInputParameters stdObj = new UserInputParameters 
    { 
     AssociateRefId = "323", 
     CpecialLoginId = "[email protected]", 
     PartnerId = "aaaa", 
     FirstName = "aaaa", 
     LastName = "bbbb", 
     Comments = "dsada", 
     CreatedDate = "2013-02-25 15:25:47.077", 
     Token = "asdadsadasd" 
    }; 

    string url = "http://localhost:13384/LinkService.svc/TokenInsertion"; 

    try 
    { 
     ASCIIEncoding encoding = new ASCIIEncoding(); 
     System.Net.WebRequest webReq = System.Net.WebRequest.Create(url); 
     webReq.Method = "POST"; 
     webReq.ContentType = "application/json; charset=utf-8"; 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(stdObj.GetType()); 
     StreamWriter writer = new StreamWriter(webReq.GetRequestStream()); 
     writer.Close(); 
     webReq.Headers.Add("URL", "http://localhost:13381/IntegrationCheck/Default.aspx"); 
     System.Net.WebResponse webResp = webReq.GetResponse(); 
     System.IO.StreamReader sr = new System.IO.StreamReader(webResp.GetResponseStream()); 
     string s = sr.ReadToEnd().Trim(); 
    } 
    catch (Exception ex) 
    { 
    } 
} 

我的服務方法:

public string UserdetailInsertion(UserInputParameters userInput) 
+0

轉換你stdObj使用JSON.NET或任何其他LIB成JSON,寫在你的poststream(在這種情況下,作家) – 1Mayur 2013-02-25 12:25:08

回答

8

你必須解析對象的格式,並將其寫入到RequestStream。

你的類

[Serializable] 
class UserInputParameters { 
    "your properties etc" 
}; 

的代碼序列化對象

private void SendData(UserInputParameters stdObj) { 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(stdObj.GetType()); 
    StreamWriter writer = new StreamWriter(webReq.GetRequestStream()); 
    JavaScriptSerializer jss = new JavaScriptSerializer(); 

    // string yourdata = jss.Deserialize<UserInputParameters>(stdObj); 
    string yourdata = jss.Serialize(stdObj); 
    writer.Write(yourdata); 
    writer.Close(); 
} 

這應該是的伎倆。

JavaScriptSerializer位於命名空間System.Web.Script.Serialization可在裝配System.Web.Extensions (in System.Web.Extensions.dll)在這裏找到的是MSDN文章:http://msdn.microsoft.com/en-us/library/bb337131.aspx

+0

我是否必須通過像這樣writer.Write(stdObj); ??? – Rooney 2013-02-25 11:48:59

+0

你必須通過JSON字符串;) – Knerd 2013-02-25 11:51:59

+0

你可以編輯你的代碼,並告訴我如何通過JSON字符串? – Rooney 2013-02-25 12:02:56

0

我們不能將對象數據從服務器端代碼使用WebRequest類發送到遠程服務器在C#中,因爲我們只能將流數據發送到遠程服務器,並且內存中的對象表示形式不是流。因此,在發送對象之前,我們需要將其序列化爲流,然後我們可以將它發送到遠程服務器。完整的代碼。

namespace SendData 
    { 
     public class SendObjectData 
     { 
      static void Main(string[] args) 
      { 

       Employee emp = new Employee(); 
       emp.EmpName = "Raju"; 
       emp.Age = 30; 
       emp.Profession = "Teacher"; 

       POST(emp); 
      } 

      // This method post the object data to the specified URL. 
      public static void POST(Employee objEmployee) 
      { 
       //Serialize the object into stream before sending it to the remote server 
       MemoryStream memmoryStream = new MemoryStream(); 
       BinaryFormatter binayformator = new BinaryFormatter(); 
       binayformator.Serialize(memmoryStream, objEmployee); 

       //Cretae a web request where object would be sent 
       WebRequest objWebRequest = WebRequest.Create(@"http://localhost/XMLProvider/XMLProcessorHandler.ashx"); 
       objWebRequest.Method = "POST"; 
       objWebRequest.ContentLength = memmoryStream.Length; 
       // Create a request stream which holds request data 
       Stream reqStream = objWebRequest.GetRequestStream(); 
      //Write the memory stream data into stream object before send it. 
       byte[] buffer = new byte[memmoryStream.Length]; 
       int count = memmoryStream.Read(buffer, 0, buffer.Length); 
       reqStream.Write(buffer, 0, buffer.Length); 

      //Send a request and wait for response. 
       try 
       { 
        WebResponse objResponse = objWebRequest.GetResponse(); 
      //Get a stream from the response. 
        Stream streamdata = objResponse.GetResponseStream(); 
      //read the response using streamreader class as stream is read by reader class. 
        StreamReader strReader = new StreamReader(streamdata); 
        string responseData = strReader.ReadToEnd(); 
       } 
       catch (WebException ex) { 
        throw ex; 
       } 

      } 
     } 
    // This is an object that needs to be sent. 
     [Serializable] 
     public class Employee 
     { 

      public string EmpName { get; set; } 
      public int Age { get; set; } 
      public string Profession { get; set; } 

     } 
    } 
相關問題