繁体   English   中英

Yii2 rest api getBodyParams() 无法从 PUT 请求中获取参数

[英]Yii2 rest api getBodyParams() can't get params from PUT request

如何从 PUT 请求中获取“token”参数?

Controller:

public function actionUpdate()
{
    $params = Yii::$app->getRequest()->getBodyParams();
    return $params;
}

要求:

curl -X PUT -H "Authorization: Bearer LL_nACyYVJFJyuHJxcOtiXu3OVNBJ_xo" -F "token=12345" "http://localhost/api/v1/devices/1"

回复:

{"success":true,"data":{"--------------------------580af3364bd175a7\r\nContent-Disposition:_form-data;_name":"\"token\"\r\n\r\n12345\r\n--------------------------580af3364bd175a7--\r\n"}}r

我试过这个:

return $params['token'];

PHP 注意:未定义索引:token

和这个

parse_str(file_get_contents("php://input"), $params);

将返回相同的结果

我认为问题与您请求的内容类型有关。 从 put/post 获取正文参数需要Content-type: application/x-www-form-urlencoded

尝试使用 curl 和-d而不是-F

curl -X PUT -H "Authorization: Bearer LL_nACyYVJFJyuHJxcOtiXu3OVNBJ_xo" -d "token=12345" "http://localhost/api/v1/devices/1"

您可以使用 Yii 的MultipartFormDataParser 这允许您在 PUT 或 DELETE 请求上使用Yii::$app->request->post()Yii::$app->request->getBodyParams() ,正如您从 POST 请求中了解到的那样。

您只需要对其进行配置即可应用:

return [
    'components' => [
        'request' => [
            'parsers' => [
                'multipart/form-data' => 'yii\web\MultipartFormDataParser'
            ],
        ],
    ],
];

就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM