如何修复 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。