最近,当我用Content-Type: multipart/form-data
发布到REST接口时,开始出现验证错误。Content-Type: application/x-www-form-urlencoded
正在工作。
这是我的测试功能:
/**
* @Rest'Route("/testtype")
*/
public function postTypeTestAction()
{
$request = $this->getRequest()->request->all();
$phpContents = file_get_contents("php://input");
return FOSView::create()->setStatusCode(200)->setData(array('request'=>$request, 'phpinput' => $phpContents));
}
当我使用Content-Type: application/x-www-form-urlencoded
: POST时
{
"request":{
"test":"message"
},
"phpinput":"test=message"
}
当我使用Content-Type: multipart/form-data
: POST时
{
"request":[
],
"phpinput":"------WebKitFormBoundaryFyQqAxqqfuhWzHUq'r'nContent-Disposition: form-data; name='"test'"'r'n'r'nmessage'r'n------WebKitFormBoundaryFyQqAxqqfuhWzHUq--'r'n"
}
由于没有请求数据,我收到了This value should not be blank
验证错误。这破坏了我的应用程序。我盯着这个看了这么久,我确信我错过了一些简单的东西。
我使用的是Symfony 2.3.7和FOSRestBundle 1.0.0。
这个问题一夜之间就解决了。没有重新启动服务器,没有更改代码,我使用相同的工具进行测试(DHC by Restlet-Chrome扩展)。然而,由于这在开发环境和暂存环境中都不起作用,现在在这两个环境中都起作用,所以我唯一的答案是测试工具Chrome、本地缓存问题或某种组合。
经验教训:使用多种测试工具。
现在,当我使用Content-Type: application/x-www-form-urlencoded
:进行POST时
{
"request":{
"test":"message"
},
"phpinput":"test=message"
}
现在,当我使用Content-Type: multipart/form-data
:进行POST时
{
"request":{
"test":"message"
},
"phpinput":""
}