试图JSON编码和接收400: Bad Request
在yii2
.我试图在Rest客户端编码,但它无法正常工作.
<?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\TblUserRegistration;
class UserController extends Controller
{
public function actionRegister()
{
$model = new TblUserRegistration();
$username = $_POST['username'];
echo json_encode($username);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
解决方案 1:如果控制器的所有操作都会传递 json,您还可以考虑扩展yii\rest\Controller而不是 yii\web\Controller :
namespace app\controllers;
use Yii;
class UserController extends \yii\rest\Controller
{
public function actionRegister()
{
$username = Yii::$app->request->post('username');
return $username;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您需要处理 CRUD 操作,您还可以使用扩展yii\rest\Controller的ActiveController(请参阅其余文档)。
解决方案 2:扩展yii\web\Controller 时的另一种方法是使用yii\filters\ContentNegotiator。请注意,此处可能强制设置$enableCsrfValidation
为false,如相关文档中所述:
是否启用CSRF(跨站请求伪造)验证。默认为 true。当启用 CSRF 验证时,提交给 Yii Web 应用程序的表单必须来自同一应用程序。如果没有,将引发 400 HTTP 异常。
注意,此功能要求用户客户端接受cookie。此外,要使用此功能,通过 POST 方法提交的表单必须包含一个隐藏输入,其名称由 $csrfParam 指定。你可以使用 yii\helpers\Html::beginForm() 来生成他的隐藏输入。
上面的代码可以这样重写:
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\filters\ContentNegotiator;
use yii\web\Response;
class UserController extends Controller
{
public $enableCsrfValidation = false;
public function behaviors()
{
return [
'contentNegotiator' => [
'class' => ContentNegotiator::className(),
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
'only' => ['register'],
],
];
}
public function actionRegister()
{
$username = Yii::$app->request->post('username');
return $username;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6371 次 |
最近记录: |