2012-10-30 15 views
7

Was ich tun muss, ist, dass ich JSON-Daten in bestimmten URL posten Wo meine JSON wieErste (415) Nicht unterstützter Medientyp Fehler

{ 
    "trip_title":"My Hotel Booking", 
    "traveler_info":{ 
     "first_name":"Edward", 
     "middle_name":"", 
     "last_name":"Cullen", 
     "phone":{ 
      "country_code":"1", 
      "area_code":"425", 
      "number":"6795089" 
     }, 
     "email":"[email protected]" 
    }, 
    "billing_info":{ 
     "credit_card":{ 
      "card_number":"47135821", 
      "card_type":"Visa", 
      "card_security_code":"123", 
      "expiration_month":"09", 
      "expiration_year":"2017" 
     }, 
     "first_name":"Edward", 
     "last_name":"Cullen", 
     "billing_address":{ 
      "street1":"Expedia Inc", 
      "street2":"108th Ave NE", 
      "suite":"333", 
      "city":"Bellevue", 
      "state":"WA", 
      "country":"USA", 
      "zipcode":"98004" 
     }, 
     "phone":{ 
      "country_code":"1", 
      "area_code":"425", 
      "number":"782" 
     } 
    }, 
    "marketing_code":"" 
} 

Und meine Funktion

string message = "URL"; 
_body="JSON DATA"; 
HttpWebRequest request = HttpWebRequest.Create(message) as HttpWebRequest; 
if (!string.IsNullOrEmpty(_body)) 
{ 
    request.ContentType = "text/json"; 
    request.Method = "POST"; 

    using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
    { 
     streamWriter.Write(_body); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 
} 

using (HttpWebResponse webresponse = request.GetResponse() as HttpWebResponse) 
{ 
    using (StreamReader reader = new StreamReader(webresponse.GetResponseStream())) 
    { 
     string response = reader.ReadToEnd(); 
    } 
} 
sieht

Und wenn ich es poste; Ich erhalte einen Fehler

"The remote server returned an error: (415) Unsupported Media Type."

Jeder hat eine Vorstellung davon; wo ich mich irre?

+0

Haben Sie das jemals gelöst? Ich stehe mit einem sehr ähnlichen Problem fest [das ich hier gepostet habe] (http://stackoverflow.com/questions/14381385/system-net-webexception-when-sending-json-using-post-request-to-a- jira-api) – calebisstupid

Antwort

12

Versuchen Sie folgendes:

request.ContentType = "application/json" 
+0

Versucht es aber kein Glück.Vielen Dank für die Antwort – user1785373

+0

Wenn dies nicht funktioniert, bedeutet dies, dass die Server-Seite Json nicht erwartet, so ist das Problem auf der Serverseite nicht der Client. –

+0

für mich hat das funktioniert, es scheint, dass ich angeben musste, dass die Anfrage war ein JSON – break7533

0

Ich bin nicht 100% sicher, aber ich denke, Sie haben den Text als byteArray zu senden, versuchen Sie dies:

req = (HttpWebRequest)HttpWebRequest.Create(uri); 
     req.CookieContainer = cookieContainer; 
     req.Method = "POST"; 
     req.ContentType = "text/json"; 
     byte[] byteArray2 = Encoding.ASCII.GetBytes(body); 
     req.ContentLength = byteArray2.Length; 
     Stream newStream = req.GetRequestStream(); 
     newStream.Write(byteArray2, 0, byteArray2.Length); 
     newStream.Close(); 
+0

Versuchte es aber kein Glück. Danke für die Antwort – user1785373

0

umbenannt ich mein Projekt und aktualisiert alle die zu korrelierenden Namespaces, nach denen ich genau dieselbe Nachricht erhalten habe. Ich erkannte, dass ich nicht die Namensräume in der web.config aktualisiert hatte (Name und Vertrag):

<system.serviceModel> 
    <services> 
    <service name="X.Y.Z.Authentication" behaviorConfiguration="ServiceBehaviour"> 
     <endpoint address="" binding="webHttpBinding" contract="X.Y.Z.IAuthentication" behaviorConfiguration="web" bindingConfiguration="defaultRestJsonp"></endpoint> 
    </service> 
    </...> 
</..> 

Hope this jemand der Lektüre dieses hilft.

0

dies Probe eines Code i für Web-API-Funktion erstellt, die von anderen json Daten

string Serialized = JsonConvert.SerializeObject(jsonData); 
using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    HttpContent content = new StringContent(Serialized, Encoding.Unicode, "application/json"); 
    var response = await client.PostAsync("http://localhost:1234", content); 
} 
1

Wie beantwortet nimmt die Ausgabe mit dem Content ist. Sollte "Anwendung/json" sein. Hier

ist eine Probe mit dem alten WebRequest

var parameters = Newtonsoft.Json.JsonConvert.SerializeObject(obj); 

var req = WebRequest.Create(uri); 

req.Method = "POST"; 
req.ContentType = "application/json"; 

byte[] bytes = Encoding.ASCII.GetBytes(parameters); 

req.ContentLength = bytes.Length; 

using (var os = req.GetRequestStream()) 
{ 
    os.Write(bytes, 0, bytes.Length); 

    os.Close(); 
} 

var stream = req.GetResponse().GetResponseStream(); 

if (stream != null) 
    using (stream) 
    using (var sr = new StreamReader(stream)) 
    { 
     return sr.ReadToEnd().Trim(); 
    } 
return "Response was null"; 
0

serialisiert die Daten, die Sie wollen, dass es passieren und kodieren. Erwähnen Sie auch req.ContentType = "application/json";

"martin" Code funktioniert.

LoginInfo obj = new LoginInfo(); 

obj.username = uname; 
obj.password = pwd; 
var parameters = Newtonsoft.Json.JsonConvert.SerializeObject(obj); 

var req = WebRequest.Create(uri); 

req.Method = "POST"; 
req.ContentType = "application/json"; 

byte[] bytes = Encoding.ASCII.GetBytes(parameters); 

req.ContentLength = bytes.Length; 

using (var os = req.GetRequestStream()) 
{ 
    os.Write(bytes, 0, bytes.Length); 

    os.Close(); 
} 

var stream = req.GetResponse().GetResponseStream(); 

if (stream != null) 
    using (stream) 
    using (var sr = new StreamReader(stream)) 
    { 
     return sr.ReadToEnd().Trim(); 
    } 
0

Für WebAPI >> Wenn Sie calling this POST method from fiddler sind, nur diese in der Kopfzeile unterhalb der Linie hinzuzufügen.

Content-Type: application/json 
Verwandte Themen