如何修复 Xamarin 中不支持的媒体类型
How to fix Unsupported Media Type in Xamarin
我使用 EF 创建 WebAPI。一切似乎都很好。我将 Swagger 添加到应用程序中。
我从 Xamarin Forms 登录用户使用 OAuth 唱 ASP.NET 身份。
public async Task LoginAsync(string userName, string password)
{
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("phoneNum", userName),
new KeyValuePair<string, string>("passwordUs", password),
};
var request = new HttpRequestMessage(
HttpMethod.Post, "https://xxxxxxx/api/Token");
request.Content = new FormUrlEncodedContent(keyValues);
var client = new HttpClient();
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
Debug.WriteLine(content);
}
但是,我收到错误:Unsupported Media Type
。同时我检查了Swagger,好的
请帮我解决问题。谢谢
更新
我添加了:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我查了Swagger和Postman都ok
但是,我得到错误:Unsupported Media Type
从所示图像中的 Curl 和 Postman,API 最有可能期望 JSON 但所示代码正在发送 URL 编码表单数据。
//...
request.Content = new FormUrlEncodedContent(keyValues);
//...
发送支持的内容类型 (application/json),这应该可以解决您的问题。
例如
static HttpClient client = new HttpClient();
public async Task LoginAsync(string userName, string password) {
var model = new {
phoneNum = userName,
passwordUs = password
};
string json = JsonConvert.SerializeObject(model);
var content = new StringContent(json, Encoding.UTF8, "application/json");
string url = "https://xxxxxxx/api/Token";
var response = await client.PostAsync(url, content);
var responseBody = await response.Content.ReadAsStringAsync();
Debug.WriteLine(responseBody);
}
上述对原始代码的重构创建了一个具有所需成员的模型,并使用 JSON.Net.
将其序列化为 JSON
该内容将以预期格式作为请求正文发布到 API。
我使用 EF 创建 WebAPI。一切似乎都很好。我将 Swagger 添加到应用程序中。 我从 Xamarin Forms 登录用户使用 OAuth 唱 ASP.NET 身份。
public async Task LoginAsync(string userName, string password)
{
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("phoneNum", userName),
new KeyValuePair<string, string>("passwordUs", password),
};
var request = new HttpRequestMessage(
HttpMethod.Post, "https://xxxxxxx/api/Token");
request.Content = new FormUrlEncodedContent(keyValues);
var client = new HttpClient();
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
Debug.WriteLine(content);
}
但是,我收到错误:Unsupported Media Type
。同时我检查了Swagger,好的
请帮我解决问题。谢谢
更新 我添加了:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我查了Swagger和Postman都ok
但是,我得到错误:Unsupported Media Type
从所示图像中的 Curl 和 Postman,API 最有可能期望 JSON 但所示代码正在发送 URL 编码表单数据。
//...
request.Content = new FormUrlEncodedContent(keyValues);
//...
发送支持的内容类型 (application/json),这应该可以解决您的问题。
例如
static HttpClient client = new HttpClient();
public async Task LoginAsync(string userName, string password) {
var model = new {
phoneNum = userName,
passwordUs = password
};
string json = JsonConvert.SerializeObject(model);
var content = new StringContent(json, Encoding.UTF8, "application/json");
string url = "https://xxxxxxx/api/Token";
var response = await client.PostAsync(url, content);
var responseBody = await response.Content.ReadAsStringAsync();
Debug.WriteLine(responseBody);
}
上述对原始代码的重构创建了一个具有所需成员的模型,并使用 JSON.Net.
将其序列化为 JSON该内容将以预期格式作为请求正文发布到 API。