POSTing с Content-Type: multipart/form-data приводит к пустому телу запроса

Недавно я начал получать ошибки проверки при отправке POST в мой интерфейс REST с помощью Content-Type: multipart/form-data. 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));
}

Когда я POST использую Content-Type: application/x-www-form-urlencoded:

{
  "request":{
    "test":"message"
   },
  "phpinput":"test=message"
}

Когда я POST использую Content-Type: multipart/form-data:

{
  "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.


person Rob    schedule 26.11.2013    source источник


Ответы (1)


Проблема решилась буквально за ночь. Нет перезагрузки сервера, никаких изменений в коде, и я использую тот же инструмент для тестирования (DHC by Restlet — расширение Chrome). Однако, поскольку это не работало как в среде разработки, так и в тестовой среде, и теперь работает в обеих средах, у меня остается единственный ответ: инструмент тестирования, Chrome, проблема с локальным кэшированием или какая-то комбинация.

Извлеченный урок: используйте несколько инструментов тестирования.

Теперь, когда я POST использую Content-Type: application/x-www-form-urlencoded:

{
  "request":{
    "test":"message"
   },
  "phpinput":"test=message"
}

Теперь, когда я POST использую Content-Type: multipart/form-data:

{
  "request":{
    "test":"message"
   },
  "phpinput":""
}
person Rob    schedule 27.11.2013