web-dev-qa-db-fra.com

Obtention (415) Erreur de type de support non pris en charge

Ce que je dois faire, c'est que je dois publier des données JSON dans une URL donnée À quoi ressemble mon JSON

{
    "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":""
}

Et ma fonction 

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

Et quand je le poste; Je reçois une erreur 

"Le serveur distant a renvoyé une erreur: (415) Type de support non pris en charge."

Quelqu'un a une idée à ce sujet; où je me trompe?

11
user1785373

Essaye ça:

request.ContentType =  "application/json"
19
nieve

Comme d'autres l'ont répondu, le problème concerne le ContentType. Devrait être 'application/json'.

Voici un exemple avec l'ancien 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

J'ai renommé mon projet et mis à jour tous les espaces de noms afin de les mettre en corrélation, après quoi j'ai reçu exactement le même message.

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

J'espère que cela aide tous ceux qui lisent ceci.

1
Coenraad Myburgh

Pour WebAPI >> Si vous êtes calling this POST method from fiddler, ajoutez simplement cette ligne ci-dessous dans l'en-tête.

Content-Type: application/json
0
Rakesh Burbure

ceci est un exemple d'un code que j'ai créé pour la fonction API Web qui accepte les données JSON 

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

Sérialiser les données que vous voulez transmettre et les encoder. Indiquez également Req.ContentType = "application/json";

"martin" le code fonctionne. 

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

Je ne suis pas sûr à 100% mais je suppose que vous devez envoyer le texte sous forme de byteArray, essayez ceci:

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