Can';t从php访问Web API

Can';t从php访问Web API,php,json,asp.net-core-webapi,Php,Json,Asp.net Core Webapi,我想把这个叫做 [Route("CreateHL7TestFile")] [HttpPost] public IActionResult CreateHL7TestFile([FromBody] JObject data) { // Code here } 从使用cUrl的php函数。当我尝试在不传递任何数据的情况下调用API时,它工作得很好。当我尝试添加“$data”时,我无法访问API。当我使用Postman的数据调用API时,它也可以正

我想把这个叫做

    [Route("CreateHL7TestFile")]
    [HttpPost]
    public IActionResult CreateHL7TestFile([FromBody] JObject data)
    {
     // Code here
     }
从使用cUrl的php函数。当我尝试在不传递任何数据的情况下调用API时,它工作得很好。当我尝试添加“$data”时,我无法访问API。当我使用Postman的数据调用API时,它也可以正常工作。所以我假设我的错误在php端

我的php函数如下所示

  public function CallAPI($method, $url, $data = false)
  {         
   $data = array("value1" => "some value");

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('test1' => 'value1', 'test2' => 'value2')));

 $result = curl_exec($ch);

 print_r($result);
 curl_close($ch); 
}

任何帮助都将不胜感激。 谢谢
亚当

试试这样的方法:

public function CallAPI($method, $url, $data = false)
   {         
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('test1' => 'value1', 'test2' => 'value2')));
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $result = curl_exec($ch);

     print_r($result);
     curl_close($ch); 
}

如果您想发送json,那么我认为您必须设置标题,类似于:

public function CallAPI($method, $url, $data = false)
   {         
     $dat = array("TEST1","TEST2");     
     $data = json_encode($dat);        
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $result = curl_exec($ch);

     print_r($result);
     curl_close($ch);     
}

在asp.net-core服务器上使用适当的模型绑定传入数据

public class MyData {
    public string value1 { get; set;}
}
并相应更新行动

[Route("CreateHL7TestFile")]
[HttpPost]
public IActionResult CreateHL7TestFile([FromBody] MyData data) {
    // Code here
}
参考以下文章

在PHP端尝试以下操作

$data = array("value1" => "some value");                                                                    
$data_string = json_encode($data);                                                                                   

$ch = curl_init($url);                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

print_r($result);
curl_close($ch); 

对于您的实际请求,相应地重构预期的数据模型。

您能显示您在邮递员上发送的内容吗?如果它是一个实体,它必须是关键值我实际上有一个数组,我正计划传递它,但我只想先得到一个值。我的价值是,我从Postman传入的只是{“HL7”:“TEST”},即使我使用$dat=array创建php数组(“HL7”=>“TEST”);我还是打不中。有没有更好的方法让我接受Web API方面的调用?检查我的回答朋友,看看是否有帮助,API看起来很好,这取决于您是否需要某种类型或结构。@brachen33显示正在调用的URL,并在可用于重现问题的中显示acion的控制器,但仍然没有显示任何内容。我的$result返回为true,但它没有命中,因为它没有命中API中的断点。您尝试过以下哪一个?第一个应该有效。添加curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type:application/json'));我的第一个例子
$data = array("value1" => "some value");                                                                    
$data_string = json_encode($data);                                                                                   

$ch = curl_init($url);                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

print_r($result);
curl_close($ch);