制作Windows手机应用程序,虽然我可能很容易从我的网络Api拉出来但是我很难发布到它。每当发布到api时,我都会得到"不支持的媒体类型"错误消息,我不确定为什么会发生这种情况,因为我使用的类作为我的JSON帖子的基础与api中使用的类相同。
PostQuote(后方法)
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//
}
}
}
}
报价和主题(模型)
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; }
}
答案 0 :(得分:45)
正如您在this和this文章中所看到的,您应该在创建StringContent时设置媒体类型
new StringContent(json, Encoding.UTF32, "application/json");
答案 1 :(得分:3)
我在快速而又脏的反向代理上工作时发现了这个问题。我需要表单数据而不是JSON。
这对我有用。
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;
答案 2 :(得分:0)
要修复不受支持的媒体类型,我必须使用HttpRequestMessage并添加标头以接受带有像下面这样的MediaTypeWithQualityHeaderValue的json。
func getArrayValues() -> [[String]] {
var btns: [[String]] = [[]]
let buttonRows = DatabaseHelper().queryDatabase(passedCategory: category)
for each in buttonRows {
btns.append([each.english,each.indonesian])
}
gotValues = true
return btns
}