2015-07-20 17 views
7

Fare un'applicazione per Windows Phone e sebbene io possa facilmente prelevare dal mio Web Api, ho problemi a postarlo. Ogni volta che postando l'API viene visualizzato il messaggio di errore "Tipo di supporto non supportato" e non sono sicuro del motivo per cui sta accadendo considerando che la classe che uso come base per il mio post JSON è uguale a quella utilizzata nell'API.Errore di tipo di supporto non supportato durante la registrazione sull'API Web

PostQuote (Post Method)

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

Preventivo e Argomento (Modello)

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

risposta

24

Come si può vedere nel this e this articoli, è necessario impostare il tipo di supporto per la creazione di StringContent

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

In qualche modo non funziona con Encoding.UTF32. Encoding.UTF8 funziona. Alcuna spiegazione? – MichaelD

+0

Qual è l'errore? –

+0

Nessun errore, i valori non vengono analizzati nel modello (rimangono null) – MichaelD

1

Ho trovato questa domanda mentre lavoravo un proxy inverso veloce e sporco. Avevo bisogno dei dati del modulo e non di JSON.

Questo ha fatto il trucco per me.

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;