我正在制作REST API,其中包括get-methods和post-methods。 get方法按计划工作,但是当我使用相同的技术访问post-methods中的参数时,它不起作用。
以下是后置控制器的示例(出于测试目的,它实际上并没有做任何有用的事情,只是尝试访问我发送的名称参数):
/**
*
* Post a resource
*
* @ApiDoc(
* section="/resources"
* )
*
*
* @Rest\QueryParam(name="name", requirements="[a-z]+", default="Default name", description="Something")
*
*
* @param Request $request
* @return array
*
* @Rest\View()
* @param ParamFetcher $paramFetcher
*/
public function cpostAction(Request $request){
//$name = $paramFetcher->get('name');
$name = $request->get('name');
$testArr = array();
$testArr['name'] = $name;
return $testArr;
}
} // "api_post_resources" [post] /resources
以下是请求正文:
Request Url: http://localhost:8080/utdanningsprosjekt/REST/Corsane/web/app_dev.php/api/resources.json
Request Method: POST
Status Code: 200
Params: {
"name": "test"
}
以下是返回的内容:
[]
我尝试访问该参数的其他一些方法是:
如上所述,当方法是get方法时,访问参数没有问题,但是当它是POST请求时,它似乎不起作用。在某些时候我能够使它工作,但我不知道为什么,并且无法重现它。
你们中的任何人都知道问题是什么,或者知道它可能是什么或与之有什么关系?任何帮助都将深表感谢!
答案 0 :(得分:1)
当我切换到使用x-www-form-urlencoded格式或表单数据格式(以及从REST Console chrome扩展程序到Postman - REST Client chrome扩展程序时,它开始工作了,尽管这可能不是与它有任何关系)。
因此以下请求有效(x-www-form-urlencoded格式):
POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json HTTP / 1.1主机:localhost:8080缓存控制:无缓存内容类型: 应用程序/ x-WWW窗体-urlencoded
名=试验&安培; URL = www.test.com
并且这个(表单数据格式)也可以使用:
POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json HTTP / 1.1主机:localhost:8080 Cache-Control:no-cache
---- WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition:form-data;名称= “名称”
TOR ---- WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition:form-data;名称= “URL”
www.hey.com ---- WebKitFormBoundaryE19zNvXGzXaLvS5C
虽然这不起作用(原始格式):
POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json HTTP / 1.1主机:localhost:8080 Cache-Control:no-cache
[{ “名称”: “TOR”}]
由于JSON是首选格式,我将研究如何处理服务器端的json格式化POST请求,并感谢任何有关此问题的输入,但至少我不再感到在通过REST API发布数据时无能为力:)
答案 1 :(得分:0)
如果要从请求中访问json数据,则应启用body listeners。
答案 2 :(得分:0)
可能与此No POST data received Symfony
有关您的GET
请求正在运行,因为当您被重定向时,正在传递查询参数,但数据不会传递给POST请求。
你可能只是在某个地方重写错误。您可以使用跟随重定向跟踪
答案 3 :(得分:0)
/**
* @param string $paramName
* @return mixed
*/
protected function _getParam($paramName)
{
$param = $this->getRequest()->request->get($paramName);
if (!$param) {
$params = json_decode($this->getRequest()->getContent(), true);
if (array_key_exists($params[$paramName])) {
$param = $params[$paramName];
}
}
return $param;
}