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

.NET MAUI调用PHP API存MySQL失败(Postman正常)求排查

问题分析与解决方案

1. JSON序列化命名不匹配(核心问题)

System.Text.Json默认采用驼峰命名策略,你的模型属性emp_pin会被序列化为"empPin"(而非"emp_pin"),但PHP端通过$data['emp_pin']获取值,导致无法拿到有效数据——最终插入空值到数据库,但因SQL语法合法、执行成功,所以接口返回SUCCESS,数据库却无有效数据。

修正方案二选一:

  • 给模型属性指定序列化名称:
using System.Text.Json.Serialization;

public class EmployeeData
{
    [JsonPropertyName("emp_pin")]
    public string emp_pin { get; set; }
}
  • 配置序列化器保留原属性名:
string js = JsonSerializer.Serialize(emp, new JsonSerializerOptions
{
    PropertyNamingPolicy = null
});

2. 同步调用HttpClient存在风险

你使用.Result同步阻塞调用PostAsync,可能导致UI线程死锁或请求未完整发送,建议改用异步await方式(注意方法需标记为async):

var response = await cl.PostAsync(Url, httpContent);

3. PHP端补充错误处理,便于排查问题

当前PHP代码未校验JSON解析结果、emp_pin是否存在,即使数据异常也会返回SUCCESS,难以定位问题。修改代码增加错误检查:

<?php
require_once('dbhelper.php');

$json = file_get_contents('php://input');
$data = json_decode($json, true);

// 检查JSON解析是否成功
if ($data === null) {
    echo json_encode(array('RESPONSE' => 'FAILED', 'ERROR' => 'Invalid JSON'));
    exit;
}

// 检查emp_pin是否存在且非空
if (!isset($data['emp_pin']) || trim($data['emp_pin']) === '') {
    echo json_encode(array('RESPONSE' => 'FAILED', 'ERROR' => 'emp_pin missing or empty'));
    exit;
}

$emppin = $data['emp_pin'];
$sql = $conn->prepare("INSERT INTO test (emp_pin) VALUES (?)");
$sql->bind_param('s', $emppin);

// 检查SQL执行是否成功
if ($sql->execute()) {
    echo json_encode(array('RESPONSE' => 'SUCCESS'));
} else {
    echo json_encode(array('RESPONSE' => 'FAILED', 'ERROR' => $sql->error));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:43:14