Yii2 Rest API的PUT方法调用不起作用

10

在我的控制器中:

namespace app\api\modules\v1\controllers;

use yii\rest\ActiveController;
use yii\filters\VerbFilter;
use yii\web\Response;

class CountryController extends ActiveController
{
public $modelClass = 'app\models\Country';

public function behaviors()
{
    return [
        [
           'class' => 'yii\filters\ContentNegotiator',
           'only' => ['index', 'view','create','update','search'],
           'formats' => ['application/json' =>Response::FORMAT_JSON,],

        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'index'=>['get'],
                'view'=>['get'],
                'create'=>['post'],
                'update'=>['PUT'],
                'delete' => ['delete'],
                'deleteall'=>['post'],
                'search'   => ['get']
            ],

        ]
    ];
}
}`

我使用POSTMAN应用程序进行尝试

创建使用POST方法 http://localhost/myapp/api/v1/countries,运行良好。但是更新时我使用PUT方法 http://localhost/myapp/api/v1/countries/16,它返回ID为16的记录作为JSON输出,而不是按预期更新。

出了什么问题呢?谢谢!


如果PUT调用返回正确的对象,似乎UpdateAction工作正常。您确定您发布的值是否在您的“rules()”集中吗? - Jap Mul
2个回答

8
在POSTMAN应用程序中,打开请求正文选项卡,并选择x-www-form-urlencoded而不是form-data。这对我有用。
请参考以下截图:x-www-form-urlencoded selected

-1

如果你觉得舒服的话,这里还有另一个选择。不用 behaviors(),你可以添加类似这样的代码,它会起到同样的作用,而且不会出现任何问题。

public function actions()
{
    $actions = parent::actions();
    unset($actions['index']);
    unset($actions['create']);
    unset($actions['delete']);
    unset($actions['update']);
    unset($actions['view']);
    return $actions;
}

答案与问题无关。 - temirbek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接