2013-11-26 3 views
1

Недавно я начал получать ошибки проверки при отправке POST на мой REST-интерфейс с Content-Type: multipart/form-data. Content-Type: application/x-www-form-urlencoded работает.POSTing с Content-Type: результаты multipart/form-data в пустом теле запроса

Вот мое тестирование функции:

/** 
* @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:

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

Когда я отправляю с помощью 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.

ответ

1

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

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

Теперь, когда я отправляю с помощью Content-Type: application/x-www-form-urlencoded:

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

Теперь, когда я отправляю с помощью Content-Type: multipart/form-data:

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