如何将POST参数从PHP传递到ASP Web Api?

时间:2014-02-07 13:44:26

标签: php asp.net web-services asp.net-web-api

我的服务器是Asp Net Web Api应用程序。它工作正常,但现在我尝试从PHP调用一些服务。

.Net代码是:

public void Post(int id, [FromBody] string param1)

在PHP方面,我使用:

$data = array("param1" => "value1");
$data_string = json_encode($data);
$ch = curl_init('http://localhost:53816/api/enterpriseapi/5');
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);

使用Debug,从PHP实际调用.Net服务,id分配给5,但POST“paramater1”参数始终为null,而不是“value1”。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

要检查的一些项目(不是PHP开发人员);

  • 使用[FromBody] - 请注意,POST正文格式应该 =foo(而不是您期望的键值对 - 例如bar=foo

  • "When a parameter has [FromBody], Web API uses the Content-Type header to select a formatter. In this example, the content type is "application/json" and the request body is a raw JSON string (not a JSON object)."

REF:

... H个

答案 1 :(得分:1)

我不熟悉PHP,但我认为请求正文对于您显示的代码将是这样的。

{"param1" : "value1"}

如果这是正确的,你需要有你的动作方法和像这样的DTO类来绑定工作。

public void Post(int id, MyType myParam) { }

public class MyType
{
    public string Param1 { get; set; }
}

现在,通过此,您可以看到Param1参数的myParam属性设置为value1

默认情况下,body会绑定到类似MyType类的复杂类型。如果要绑定到简单类型,则不能使用键值对。由于正文完全绑定到一个参数,您将以某种方式需要在PHP中指定您的请求,以便只发送值而不使用密钥,就像这样。

"value1"