使用Content-Type进行POST:multipart / form-data导致空请求正文

时间:2013-11-26 23:07:13

标签: php rest symfony fosrestbundle

最近,当我使用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。

1 个答案:

答案 0 :(得分:1)

这个问题在一夜之间彻底解决了。没有服务器重启,没有更改代码,我使用相同的工具来测试(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":""
}