2016-05-16 13 views
1

Ich versuche, JSON-Daten (in Datei vorhanden) an JSON POST-Methode zu übergeben.Übergabe von JSON-Daten an die REST-POST-Methode

Aber erhalten HTTP 400 Fehler (Bad Request) - "Der Remote-Server gab einen Fehler zurück: (400) Bad Request."

Bitte helfen.

Schnittstelle -:

[OperationContract] 
[WebInvoke(UriTemplate = "/JSON", Method = "POST")] 
string CreatePersonFromJSONString(Person createPerson); 

implementierte Funktion -:

public string CreatePersonFromJSONString(Person createPerson) 
    { 
    createPerson.ID = (++personCount).ToString(); 
    persons.Add(createPerson); 
    return new JavaScriptSerializer().Serialize(createPerson); 
    } 

Programm -:

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest; 
req.KeepAlive = false; 
req.Method = Method.ToUpper(); 

if (("POST,PUT").Split(',').Contains(Method.ToUpper())) 
{ 
    Console.WriteLine("Enter JSON FilePath:"); 
    string FilePath = Console.ReadLine(); 
    content = (File.OpenText(@FilePath)).ReadToEnd(); 

    req.ContentType = "application/json;"; 

    //initiate the request 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    var resToWrite = serializer.Deserialize<Person>(content); 
    StreamWriter PostData = new StreamWriter(req.GetRequestStream()); 
    PostData.Write(resToWrite); 
    PostData.Flush(); 
    PostData.Close(); 
} 

    HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 

Eingabedatei - Inhalt:

{ "Age":"25", 
     "ID":"4", 
     "Name":"Ashish" 
    } 

Person Klasse -:

[DataContract] 
    public class Person 
    { 
     [DataMember] 
     public string ID; 
     [DataMember] 
     public string Name; 
     [DataMember] 
     public string Age; 
    } 

Uri - http://localhost:5171/RestService/JSON

Method - POST

+0

Kann treffen Sie Ihre REST-Service über einen Rest-Client wie Post-Mann? Ich habe versucht, Ihr JSON scheint nicht gültig zu sein. Zum http://jsonlint.com/ und fügen Sie Ihre JSON in Humor mich, und verwenden Sie diese als Eingabe { \t "Alter":. "25", \t "ID": "4", \t " Name ":" Ashish " } –

+0

Ich kann dies mit Advanced Rest Client testen, indem ich den JSON-Text übergebe. Ich habe auch die Eingabe JSON korrigiert. Aber immer noch den gleichen Fehler. Höchstwahrscheinlich liegt der Fehler in der Übergabe von JSON-Daten im Anfragestream. req.ContentType = "application/json; charset = utf-8"; // initiiere die Anfrage JavaScriptSerializer serializer = new JavaScriptSerializer(); var resToWrite = serializer.Deserialize (Inhalt); StreamWriter PostData = neuer StreamWriter (req.GetRequestStream()); PostData.Write (resToWrite); PostData.Flush(); PostData.Close(); –

+0

Wenn du es über einen Rest-Client triffst, bekommst du noch eine schlechte Anfrage? –

Antwort

-1

mir scheint Ihre JSON ungültig ist.

In JSON die Eigenschaftsnamen in Anführungszeichen gesetzt werden müssen, so:

{ 
    "Age":"25", 
    "ID":"4", 
    "Name":"Ashish" 
} 
+0

Ich habe die JSON-Daten korrigiert. Aber immer noch den gleichen Fehler –

0

[gelöst]

I Stream anfordern musste das Schreiben von Daten ändern. Das JSON muss nicht deserialisiert werden.

Veränderte Programmteil -:

byte[] buffer = Encoding.ASCII.GetBytes(content); 
req.ContentLength = buffer.Length; 
Stream PostData = req.GetRequestStream(); 
PostData.Write(buffer, 0, buffer.Length); 
PostData.Close(); 
Verwandte Themen