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的建议在评论中帮我看看这个问题

+1

您是否使用邮递员或类似工具测试了您的服务? – Jason

+0

我只是试过邮差,我得到Status 200 OK,但是我可以在软件的文本区域看到错误,错误是我写到的一条消息:“查询失败,您的sql语法中有错误;检查手册.....“这实际上帮助我解决了这个问题,问题在于我将查询的结果存储在一个变量中并在if语句中使用它,感谢您让我知道这个伟大的工具: ) –

,问题是在这一段代码:

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)); 
       } 

我无法从移动设备在通话过程中看到这样的行为,所以用'邮差'非常有用。