2013-11-26 110 views
1

最近我在发布到我的REST接口上时发现验证错误。 Content-Type: application/x-www-form-urlencoded正在工作。使用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

这个问题在一夜之间就解决了。没有服务器重新启动,没有更改代码,并且我使用相同的工具来测试(Chrome扩展名为DHC by Restlet)。但是,由于这不适用于开发环境和临时环境,现在正在两种环境中工作,这使得我唯一的答案就是测试工具,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":"" 
}