HttpClient总是返回从Xamarin类呼叫状态代码200
问题描述:
我学习Xamarin和PHP并排,我卡在这里,因为我无法从PHP接收正确的响应,我知道有一个错误,因为我有意故意拼写查询。HttpClient总是返回从Xamarin类呼叫状态代码200
我使用XAMPP和Visual Studio 2017年,我在PHP代码如下所示:
<?php
require_once('logger.php');
include('userobj.php');
$log = new Log("errors.log");
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
$log->{'Write'}('Received a POST Request');
try
{
$data = json_decode(file_get_contents('php://input'), true);
foreach($data as $key =>$value)
{
$log->{'Write'}("array key: " . $key . " array value: " . $value);
}
$user = new User($data);
$log->{'Write'}("after createad: ");
$user->{'CreateNewUser'}();
}
catch (Exception $e)
{
http_response_code("400");
$log->{'Write'}("Error message\n"+$e->getMessage());
}
}
else
{
$log->{'Write'}("REQUEST NOT A POST");
}
?>
我一直在使用PHP内的一个try/catch试过,我知道它得到的错误,因为我能写我的日志,那我打电话的样子像这样的方法:
public function CreateNewUser()
{
try
{
global $log, $config;
$log->{'Write'}("Creating Connection");
$connection = mysqli_connect($config->db_host,$config->db_username,$config->db_pwd,$config->db_dbname);
if($connection)
{
$log->{'Write'}("Creating new user");
$query = "INSERT INTOS users (name, lastname, policynumber, phone, email) ";
$query .= "VALUES ('$this->name', '$this->lastname', '$this->policynumber', '$this->phone', '$this->email');";
$result = mysqli_query($connection, $query);
if(!$result)
{
$log->{'Write'}('Query Failed on Create New User: ');
$log->{'Write'}(mysqli_error($connection));
die('Query Failed' . mysqli_error($connection));
}
}
else
{
$log->{'Write'}("Connection Failed");
die('Connection Failed');
}
}
catch(Exception $e)
{
http_response_code("400");
throw $e;
}
}
正如我所说,我有拼写错误的查询强制错误......终于我从Xamarin C#看起来通话像这样:
public static async Task CreateUser(User user)
{
try
{
HttpClient _client = new HttpClient();
var content = JsonConvert.SerializeObject(user);
var response = await _client.PostAsync(url, new StringContent(content));
string error = response.ToString();
}
catch (Exception ex)
{
throw ex;
}
}
如果我调试此代码并查看变量“response”的值,它始终具有状态代码200,但我看到过类似的问题,但都使用“GET”。使用邮递员由Jason的建议在评论中帮我看看这个问题
答
,问题是在这一段代码:
if($connection)
{
$log->{'Write'}("Creating new user");
$query = "INSERT INTOS users (name, lastname, policynumber, phone, email) ";
$query .= "VALUES ('$this->name', '$this->lastname', '$this->policynumber', '$this->phone', '$this->email');";
$result = mysqli_query($connection, $query);
if(!$result)
{
$log->{'Write'}('Query Failed on Create New User: ');
$log->{'Write'}(mysqli_error($connection));
die('Query Failed' . mysqli_error($connection));
}
}
的问题是,我已经存储了查询结果中变量名为$结果,然后我在一个语句中使用它,所以我的代码更新到这一点:
if(!$result)
{
$log->{'Write'}('Query Failed on Create New User: ');
$log->{'Write'}(mysqli_error($connection));
http_response_code(500); //This line returns the response code 500
die('Query Failed ' . mysqli_error($connection));
}
我无法从移动设备在通话过程中看到这样的行为,所以用'邮差'非常有用。
您是否使用邮递员或类似工具测试了您的服务? – Jason
我只是试过邮差,我得到Status 200 OK,但是我可以在软件的文本区域看到错误,错误是我写到的一条消息:“查询失败,您的sql语法中有错误;检查手册.....“这实际上帮助我解决了这个问题,问题在于我将查询的结果存储在一个变量中并在if语句中使用它,感谢您让我知道这个伟大的工具: ) –