web-dev-qa-db-fra.com

Erreur de type de support non pris en charge lors de la publication sur l'API Web

Faire une application Windows Phone et même si je peux facilement retirer mon Web Api, j'ai du mal à y poster. Chaque fois que je poste sur l'API, j'obtiens le message d'erreur "Type de support non pris en charge" et je ne sais pas pourquoi cela se produit étant donné que la classe que j'utilise comme base pour mon message JSON est la même que celle utilisée dans l'API.

PostQuote (méthode Post)

private async void PostQuote(object sender, RoutedEventArgs e)
        {
            Quotes postquote = new Quotes(){
                QuoteId = currentcount,
                QuoteText = Quote_Text.Text,
                QuoteAuthor = Quote_Author.Text,
                TopicId = 1019
            };
            string json = JsonConvert.SerializeObject(postquote);
            if (Quote_Text.Text != "" && Quote_Author.Text != ""){

                using (HttpClient hc = new HttpClient())
                {
                    hc.BaseAddress = new Uri("http://rippahquotes.azurewebsites.net/api/QuotesApi");
                    hc.DefaultRequestHeaders.Accept.Clear();
                    hc.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage response = await hc.PostAsync(hc.BaseAddress, new StringContent(json));
                    if (response.IsSuccessStatusCode)
                    {
                        Frame.Navigate(typeof(MainPage));
                    }
                    else
                    {
                        Quote_Text.Text = response.StatusCode.ToString();
                        //Returning Unsupported Media Type//
                    }
                }
            }
        }

Citations et sujet (modèle)

public class Quotes
    {
        public int QuoteId { get; set; }
        public int TopicId { get; set; }
        public string QuoteText { get; set; }
        public string QuoteAuthor { get; set; }
        public Topic Topic { get; set; }
        public string QuoteEffect { get; set; }
    }
    //Topic Model//
    public class Topic
    {
        public int TopicId { get; set; }
        public string TopicName { get; set; }
        public string TopicDescription { get; set; }
        public int TopicAmount { get; set; }
    }
25
Billson

Comme vous pouvez le voir dans les articles this et this , vous devez définir le type de support lors de la création de StringContent

new StringContent(json, Encoding.UTF32, "application/json");
48
Pedro Drewanz

J'ai trouvé cette question en travaillant sur un proxy inverse rapide et sale. J'avais besoin de données de formulaire et non de JSON.

Cela a fait l'affaire pour moi.

string formData = "Data=SomeQueryString&Foo=Bar";
var result = webClient.PostAsync("http://XXX/api/XXX", 
        new StringContent(formData, Encoding.UTF8, "application/x-www-form-urlencoded")).Result;
3
Robert Stokes