webentwicklung-frage-antwort-db.com.de

Abrufen (415) Nicht unterstützter Medientypfehler

Was ich tun muss, ist, dass ich JSON-Daten in der angegebenen URL Posten muss, wo mein JSON aussieht

{
    "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();
    }
}

Und wenn ich es poste; Ich bekomme einen Fehler 

"Der Remote - Server hat einen Fehler zurückgegeben: (415) Nicht unterstützter Medientyp."

Jeder hat eine Ahnung davon; wo irre ich mich?

11
user1785373

Versuche dies:

request.ContentType =  "application/json"
19
nieve

Wie von anderen beantwortet, liegt das Problem beim ContentType. Sollte 'application/json' sein.

Hier ist ein Beispiel 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";
1
martin

Ich habe mein Projekt umbenannt und alle Namespaces so aktualisiert, dass sie korrelieren, und dann erhielt ich dieselbe Nachricht. Ich erkannte, dass ich die Namespaces in der web.config (Name und Vertrag) nicht aktualisiert hatte:

<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>
  </...>
</..>

Ich hoffe, das hilft jedem, der das liest.

1

Für WebAPI >> Wenn Sie calling this POST method from fiddler sind, fügen Sie diesen unten in der Kopfzeile ein.

Content-Type: application/json
0
Rakesh Burbure

dies ist ein Beispiel eines Codes, den ich für die Web-API-Funktion erstellt habe, der Json-Daten akzeptiert 

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);   
}
0
Hany Hassan

Serialisieren Sie die Daten, die Sie übergeben möchten, und verschlüsseln Sie sie. 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
Mahipal

Ich bin nicht 100% sicher, aber ich denke, Sie müssen den Text als byteArray senden. Versuchen Sie Folgendes:

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
nichop