2017-06-02 1 views
0

Ich habe dieses json Daten BeispielREST Webservices in C# mit 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: - dieses Objekt hält Authentifizierungsdaten über den Benutzer, der verwendet wird, um zu entscheiden können wir für diese Anforderung erlauben den Zugriff auf oder nicht.

billObj Obj: - Dieses Objekt enthält Rechnungsdaten, die zum Erstellen von Einfügeoperationen verwendet werden. Sagen wir, dass jede Rechnung ein Unterkonto oder viele Unterkonten haben kann, damit wir sie dynamisch erstellen und erstellen können Json Array der Rechnungsdetails, die jedes Unterkonto und seinen Wert enthält.

i machen diesen Code in C# json.net für Insert Daten in Server

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

es gib mir Ausnahme in dieser Linie

Stream dataStream = request.GetRequestStream() 

Zusätzliche Informationen: Kann kein Content-Körper senden mit dieser Verbtyp.

i

ändern
request.Method = "GET" from get to Post 

die guten Werke fein anziehen geben Sie mir Ausnahme in Ansprechlinie

HttpWebResponse response = (HttpWebResponse)request.GetResponse() 

Zusätzliche Informationen: Der Remoteserver hat einen Fehler zurückgegeben: (405) Methode nicht erlaubt.

mir bitte mir helfen, dieses Problem zu lösen

+0

Bitte klären „die guten Werke fein anziehen geben Sie mir Ausnahme als Reaktion line“ – Kailash

+0

Eine nicht behandelte Ausnahme des Typs ‚System.Net.WebException‘ aufgetreten in System.dll Weitere Informationen : Der Remote-Server hat einen Fehler zurückgegeben: (405) Methode nicht zulässig. – user1938035

+0

Aber du sendest Klartext usr/pw über HTTP ... – Kyle

Antwort

0

Eine erholsame API/Web-Service (https://en.wikipedia.org/wiki/Representational_state_transfer) nicht zulässt, dass zum Datensatz einfügen/erstellen mit einem GET oder PUT-Methode.

Sie müssen die POST-Methode verwenden, um einen Datensatz erstellen oder einfügen zu können.

Ein weiterer Link als Referenz: https://www.ibm.com/developerworks/library/ws-restful/

+0

ich sehe es aber mache bis jetzt gleiche ausnahmen – user1938035

+0

Die Antwort-Header zeigen deutlich, dass die erlaubten Methoden sind: GET, OPTIONS, HEAD.Sie müssen sprechen/kontaktieren Sie die Person, die besitzt/unterstützt die API für die Dokumentation.Die API scheint fehlerhaft.zwei Bedenken: 1) Eine Restful API, die nur GET-Methode kann Create/einfügen Datensatz nicht unterstützen 2) Der Sicherheitsmechanismus ist nicht sicher.Ich bin überrascht, dass sie Anmeldeinformationen im Textkörper erwarten, anstatt HTTP-Basisauthentifizierungs- oder Token-basierte Sicherheit zu verwenden. – Kailash