HttpClient.PostAsync和PHP API

v440hwme  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(122)

各位尊敬的SO成员,
我正在尝试使用.NET MAUI构建android应用程序。我尝试通过PHP API使用HttpClient.PostAsync将内容保存到MySQL数据库,但我无法使其工作(响应是成功,但数据未保存到表中),而当我尝试使用POSTMAN测试PHP Api时,一切正常,并且能够保存到所需的表中。
.NET MAUI代码

EmployeeData emp = new EmployeeData();
emp.emp_pin= EmpID.Text;

HttpClient cl = new HttpClient();
string js = JsonSerializer.Serialize(emp);
StringContent httpContent = new StringContent(js, Encoding.UTF8, "application/json");
var response = cl.PostAsync(Url, httpContent).Result;
if (response.IsSuccessStatusCode)
{
    DisplayAlert("Success", "Success Record Your Data.", "OK");
}
else
{
    DisplayAlert("Fail", "Please Try Again.", "OK");
}

模型

public class EmployeeData
{
    public string emp_pin{ get; set; }
}

PHP API

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

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

$emppin=$data['emp_pin'];
$sql = $conn->prepare("INSERT INTO test (emp_pin) VALUES (?)");
$sql->bind_param('s', $emppin);
$sql->execute();
if ($sql) {
    echo json_encode(array('RESPONSE' => 'SUCCESS'));
} else {
    echo json_encode(array('RESPONSE' => 'FAILED'));
}

使用POSTMAN,数据成功保存到表中。

使用JSON Visualizer,

请给我指出我在哪一部分犯了错误。

8xiog9wr

8xiog9wr1#

emp.emppin将在结果JSON - demo中序列化为名为emppin的属性:https://dotnetfiddle.net/ywjm0W。但是在PHP中,您已经编写了一个名为emp_pin的属性,这就是您从Postman发送的内容。因此,向PHP发送具有不同属性名称的JSON对象将导致PHP出现问题- demo:https://3v4l.org/RWCUK
因此,您可以在C#类中重命名该属性,使其符合PHP的预期:

public class EmployeeData
{
    public string emp_pin{ get; set; }
}

第二,改变

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

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

相关问题