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

C#向PHP API发送POST数据返回调用API错误的问题排查

问题定位

你的接口调用失败和Item类的声明没有关系,核心原因是请求提交格式和PHP后端的接收逻辑不匹配:

  • PHP端通过$_POST读取普通提交字段、通过$_FILES读取上传的图片文件,这种写法仅支持multipart/form-data(带文件上传的表单格式)或application/x-www-form-urlencoded(普通表单格式)的POST请求
  • 你当前C#代码将数据序列化为JSON后,以application/json格式提交,PHP默认不会把JSON请求体解析填充到$_POST全局变量中,因此isset($_POST["nombre"])等所有字段校验都不通过,直接返回Error al llamar a la API错误
  • 除此之外你的C#代码没有提交foto对应的文件内容,就算格式调整正确,后续也会触发文件上传校验失败的错误

可正常调用接口的HTML表单参考:
正常运行的表单截图

修复方案

放弃JSON提交方式,改用MultipartFormDataContent构造和HTML表单一致的请求格式,同时补充文件上传内容,参考代码如下:

private async Task SignUpApiPost()
{
    // 建议全局复用HttpClient,不要每次请求新建实例,避免套接字端口耗尽
    using var httpClient = new HttpClient();
    using var formContent = new MultipartFormDataContent();

    // 逐个添加表单字段,字段名必须和PHP端$_POST读取的键名完全一致
    formContent.Add(new StringContent("Eric", Encoding.UTF8), "nombre");
    formContent.Add(new StringContent("Pino", Encoding.UTF8), "ape");
    formContent.Add(new StringContent("ericpinodiaz@gmail.com", Encoding.UTF8), "email");
    formContent.Add(new StringContent("M2022", Encoding.UTF8), "pass");

    // 添加foto字段对应的上传文件,替换为你实际的文件路径/流
    var fileStream = File.OpenRead("default.jpeg");
    formContent.Add(new StreamContent(fileStream), "foto", "default.jpeg");

    // 发送请求
    var response = await httpClient.PostAsync("https://app.domainexample.com/rest/add.php", formContent);
                
    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        // 编写请求成功后的业务逻辑
    }
}
注意事项
  • 你定义的Root类在当前场景下完全不需要使用,PHP端接收的是平铺的表单字段,不是嵌套结构的JSON数据,不需要做JSON序列化操作
  • 如果暂时不需要实际上传图片,需要同步修改PHP端的subirImagen方法,允许空文件或自动填充默认图片路径,否则会卡在文件校验步骤返回Error con el archivo相关错误
  • 生产环境建议将HttpClient声明为全局单例复用,不要在每次请求时新建实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:24:52