You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Xamarin请求ASP.NET WebAPI时返回Unsupported Media Type错误

问题核心原因

Unsupported Media Type(415错误)本质是服务端无法识别请求的Content-Type请求头,你之前添加的Accept头仅用于声明客户端期望接收的响应数据格式,和请求本身的内容格式无关,因此无法解决该错误。

解决方案按优先级排查:

  1. 匹配接口要求的请求格式
    首先确认你的/api/Token接口要求的请求格式:
  • 若接口要求application/json格式:你当前使用的FormUrlEncodedContent会默认携带application/x-www-form-urlencoded的Content-Type,和接口要求不匹配,需修改请求构造逻辑:
public async Task LoginAsync(string userName, string password)
{
    // 构造请求参数对象
    var requestParam = new 
    {
        phoneNum = userName,
        passwordUs = password
    };
    // 序列化为JSON字符串,可按需使用Newtonsoft.Json或System.Text.Json
    var jsonContent = JsonSerializer.Serialize(requestParam);
    var request = new HttpRequestMessage(
        HttpMethod.Post, "https://xxxxxxx/api/Token");
    // 构造JSON内容,显式指定Content-Type为application/json
    request.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
    var response = await client.SendAsync(request);
    var content = await response.Content.ReadAsStringAsync();
    Debug.WriteLine(content);
}
  • 若接口确实要求application/x-www-form-urlencoded格式:显式给请求内容设置ContentType,避免Xamarin平台默认实现丢失/修改请求头:
request.Content = new FormUrlEncodedContent(keyValues);
// 新增行,手动指定Content-Type
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
  1. 修正Xamarin HttpClient平台实现问题
    Xamarin的Android/iOS平台默认HttpClient实现可能会篡改请求头,实例化HttpClient时显式指定通用handler规避:
var client = new HttpClient(new HttpClientHandler());

也可在对应平台项目的属性配置中,将HttpClient实现修改为托管HttpClient,避免平台原生实现的兼容问题。

  1. 抓包验证请求头
    使用Fiddler/Charles等抓包工具,抓取Xamarin端发出的实际请求,确认Content-Type头是否符合预期、是否有异常修改或丢失。

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:48:01