如何解决Xamarin请求ASP.NET WebAPI时返回Unsupported Media Type错误
问题核心原因
Unsupported Media Type(415错误)本质是服务端无法识别请求的Content-Type请求头,你之前添加的Accept头仅用于声明客户端期望接收的响应数据格式,和请求本身的内容格式无关,因此无法解决该错误。
解决方案按优先级排查:
- 匹配接口要求的请求格式
首先确认你的/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");
- 修正Xamarin HttpClient平台实现问题
Xamarin的Android/iOS平台默认HttpClient实现可能会篡改请求头,实例化HttpClient时显式指定通用handler规避:
var client = new HttpClient(new HttpClientHandler());
也可在对应平台项目的属性配置中,将HttpClient实现修改为托管HttpClient,避免平台原生实现的兼容问题。
- 抓包验证请求头
使用Fiddler/Charles等抓包工具,抓取Xamarin端发出的实际请求,确认Content-Type头是否符合预期、是否有异常修改或丢失。
内容的提问来源于stack exchange,提问作者Chim Di Tru
相关产品推荐
相关产品推荐

