【问题标题】:Verbs for custom action is not working in yii2 REST API自定义操作的动词在 yii2 REST API 中不起作用
【发布时间】:2016-08-14 17:47:24
【问题描述】:

我在动词行为中添加了一个动词,只允许对某些操作进行 POST 请求,如果请求不是 POST,它应该返回不允许的方法,但这不起作用它返回 404 未找到响应而不是 405 不允许响应当我发送 GET 请求而不是 POST 时,请提供任何帮助

我在我的 REST 中设置了这样的行为

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => CompositeAuth::className(),
        'except' => ['login'],
        'authMethods' => [
            HttpBearerAuth::className(),
        ],
    ];

    $behaviors['verbs'] = [
        'class' => \yii\filters\VerbFilter::className(),
        'actions' => [
            //'index'  => ['get'],
            'login' => ['post', 'put'],
            'view' => ['get'],
            //'create' => ['get', 'post'],
            'update' => ['put'],
            //'delete' => ['post', 'delete'],
            'delete' => [''],
            'test', ['post']
        ],
    ];

    return $behaviors;
}

在main.php中

'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
            [
                'class' => 'yii\rest\UrlRule',
                'controller' => ['v1/vendor'],
                'extraPatterns' => [
                    'POST,PUT login' => 'login',
                    'POST logout' => 'logout',
                    'POST test' => 'test'
                ],
                'tokens' => [
                    '{id}' => '<id:\\w+>'
                ]
            ],
        ],
    ]

所以当我测试并将GET请求发送到

GET localhost/mywebsite/api/web/v1/vendors/test

它返回 404 而不是 405 状态请任何帮助

【问题讨论】:

  • 如果你尝试POST请求呢?
  • 它返回 200 @EdvinTenovimas

标签: php rest yii2 yii2-advanced-app


【解决方案1】:
'extraPatterns' => [
                ...
                'test' => 'test'
            ]

【讨论】:

  • 欢迎来到 Stack Overflow。您可能应该在答案中添加更多信息来解释它。
【解决方案2】:

来自 Yii2 指南routing:漂亮的 url,严格解析总是抛出 \yii\web\NotFound\HttpException。 您可以更新控制器的 beforeAction:

public function beforeAction() {
     if (Yii::$app->getRequest()->getMethod() != 'POST') {
          throw new \yii\web\MethodNotAllowedHttpException('Only allow POST request');
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2023-03-25
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多