2017-06-02 76 views
0

我有此JSON數據示例REST WEBSERVICES在c#使用JSON

http://84.235.49.85:58/saws/hi/is/inserSer?jsonObject={ 
    "authObject":{ 
     "userName":"1111", 
     "password":"123", 
     "baladyCode":"11", 
     "amanaCode":"061" 
     }, 
    "billObj":{ 
     "billNumber":"0611138000302", 
     "billCreationDate":"07-01-1438", 
     "billDetails":[ 
       {"depId":"11006","billValue":"1"} 
     ]} 
} 

authObject的OBJ: - 此對象保存關於將被用於決定我們可以允許訪問該請求或不用戶認證數據。

billObj對象: - 這個對象持有將用於創建插入操作的賬單數據,讓我們說,每個賬單可能有一個子賬戶或許多子賬戶,所以我們使它動態並給你創建Json數組帳單的詳細信息,包含每個子帳戶及其價值。

我做在C#中的代碼使用插入數據json.net在服務器

inserSerJSON jsonclass = new inserSerJSON(); 
      jsonclass.authObject = new AuthObject(); 
      jsonclass.authObject.userName = "7070"; 
      jsonclass.authObject.password = "123"; 
      jsonclass.authObject.baladyCode = "07"; 
      jsonclass.authObject.amanaCode = "061"; 

      jsonclass.billObj = new BillObj(); 
      jsonclass.billObj.billNumber = txtBillNum.Text.Trim(); 
      jsonclass.billObj.billCreationDate = myStatic.hdminus(dateINBillDateHig); 



      bill[] billclass = new bill[dataGridView1.Rows.Count]; 

      for (int i = 0; i < dataGridView1.Rows.Count; i++) 
      { 
       billclass[i] = new bill(); 
       billclass[i].depId = dataGridView1.Rows[i].Cells["SubAccount"].Value.ToString(); 
       billclass[i].billValue = dataGridView1.Rows[i].Cells["Amount"].Value.ToString(); 
      } 
      jsonclass.billObj.billDetails = billclass; 
      WebClient client = new WebClient(); 


      string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonclass); 
      byte[] toBytes = Encoding.ASCII.GetBytes(output); 


      HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://84.235.49.85:58/saws/hi/is/inserSer"); 
      request.Method = "GET"; 
      request.ContentLength = toBytes.Length; 
      request.ContentType = @"application/json"; 
      using (Stream dataStream = request.GetRequestStream()) 
      { 
       dataStream.Write(toBytes, 0, toBytes.Length); 
      } 
      long length = 0; 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       length = response.ContentLength; 
      } 

它給我例外,在這條線

Stream dataStream = request.GetRequestStream() 

其他信息:無法發送內容體這個動詞類型。

我改變

request.Method = "GET" from get to Post 

好的作品精放給我的異常響應線

HttpWebResponse response = (HttpWebResponse)request.GetResponse() 

其他信息:遠程服務器返回錯誤:(405)不允許的方法。

請幫我給我解決這個問題

+0

請澄清「的優秀作品精放給我的異常響應線」 – Kailash

+0

型「System.Net.WebException」未處理的異常發生在System.dll中 更多信息:遠程服務器返回錯誤:(405)方法不允許。 – user1938035

+0

但是你通過HTTP發送純文本usr/pw ... – Kyle

回答

0

一個寧靜的API/web服務(https://en.wikipedia.org/wiki/Representational_state_transfer)不允許你插入/用GET或PUT方法創造的紀錄。

您需要使用POST方法才能創建或插入記錄。

另一個鏈接以供參考:https://www.ibm.com/developerworks/library/ws-restful/

+0

我看到它,但一直做到同樣的例外 – user1938035

+0

響應標頭清楚地表明允許的方法是: GET,OPTIONS,HEAD您需要與擁有/支持API的人員進行交談/聯繫以獲得文檔API看起來有問題兩個問題:1)僅允許GET方法的Restful API不能支持創建/插入記錄2)安全機制是不安全的,我很驚訝他們期望身體憑證,而不是使用HTTP基本身份驗證或基於令牌的安全性。 – Kailash