tutorial consumir consume c# .net json asp.net-web-api windows-phone

consumir - web api c# tutorial



Error de tipo de medio no admitido al publicar en la API web (2)

Hacer una aplicación de Windows Phone y, aunque puedo extraerla fácilmente de mi Web Api, tengo problemas para publicarla. Siempre que publico en la api, aparece el mensaje de error "Tipo de medio no admitido" y no estoy seguro de por qué sucede teniendo en cuenta que la clase que utilizo como base para mi publicación JSON es la misma que la que se usa en la API.

PostQuote (Método 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// } } } }

Cotizaciones y Tema (Modelo)

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


Como puede ver en this y en this artículos, debe configurar el tipo de medio al crear StringContent

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


Encontré esta pregunta mientras trabajaba en un proxy inverso rápido y sucio. Necesitaba datos de formulario y no JSON.

Esto hizo el truco para mí.

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;