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

Visual Studio 2017 Cordova项目API Post仍走xhr_proxy报错解决

解决Visual Studio 2017 Cordova项目中jQuery POST API的415错误问题

我来帮你一步步排查和解决这个问题,你遇到的415 Unsupported Media Type错误,结合xhr_proxy的情况,主要是三个核心问题:请求的媒体类型不匹配、模拟器访问本地API的地址错误、Whitelist插件的配置不全,下面是具体的解决方案:

1. 修正API访问地址:模拟器无法直接用localhost访问电脑服务

Android模拟器里的localhost指的是模拟器自身,而你的API是运行在开发电脑上的,所以必须换成模拟器能指向宿主电脑的地址:

  • 对于Android模拟器,用10.0.2.2(这是Android模拟器默认映射到宿主电脑回环地址的特殊IP)
  • 如果是真机调试,换成你电脑的局域网IP(比如192.168.1.100)

2. 调整jQuery请求:确保发送正确的Content-Type

$.post默认会把数据以application/x-www-form-urlencoded格式发送,但大多数Web API(比如ASP.NET Web API)默认期望的是application/json格式,这才是415错误的主要原因。你需要改用$.ajax来手动配置请求头和数据格式:

$.ajax({
    url: "http://10.0.2.2:58998/api/product/save", // 替换为正确的宿主地址
    type: "POST",
    contentType: "application/json", // 明确指定媒体类型
    data: JSON.stringify(productData), // 将数据序列化为JSON字符串
    success: function(data) {
        console.log("保存成功:", data);
    },
    error: function(xhr, status, err) {
        console.error("请求失败:", xhr.responseText, status, err);
    }
});

3. 完善Cordova Whitelist配置

你已经安装了cordova-plugin-whitelist,但配置还不全,需要补充以下内容到config.xml:

<!-- 允许WebView内部导航到所有地址(调试时可用,发布建议限制到具体域名) -->
<allow-navigation href="*" />
<!-- 允许访问所有外部资源(同样发布时限制) -->
<access origin="*" />
<!-- 允许跳转外部应用(比如浏览器、邮件) -->
<allow-intent href="*" />

<!-- 配置Content-Security-Policy,明确允许连接到你的API地址 -->
<meta http-equiv="Content-Security-Policy" content="
    default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval';
    style-src 'self' 'unsafe-inline';
    script-src 'self' 'unsafe-inline' 'unsafe-eval';
    media-src *;
    connect-src http://10.0.2.2:58998 http://localhost:58998;
" />

注意:allow-intent是用来处理跳转外部应用的,和WebView内部的API请求无关,真正控制API请求的是allow-navigation和Content-Security-Policy里的connect-src。

4. 确认API端的配置(关键)

如果以上步骤都做了还是有问题,要检查你的Web API是否正确配置了JSON解析:

  • 对于ASP.NET Web API,确保控制器的Action参数加上[FromBody]标记,这样才能正确解析JSON格式的请求体:
[HttpPost]
[Route("api/product/save")]
public IHttpActionResult SaveProduct([FromBody]Product productModel)
{
    // 处理保存逻辑
    return Ok(productModel);
}
  • 确保API项目的WebApiConfig.cs里启用了JSON格式化器(默认是启用的,但可以检查一下):
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

完成这些步骤后,重新构建项目并在模拟器里调试,应该就能正常发送POST请求了。

内容的提问来源于stack exchange,提问作者dfmetro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:48:07