Yii2 使端点可通过网络和休息访问 api

Yii2 Make endpoint accessible through web and rest api

客户已请求通过 Web 界面和 REST 提供完全相同的端点 API。

只有在登录时才能使用 Web 浏览器看到相同的端点。通过 REST API 访问它时,必须提交有效的访问令牌。

此特定端点的规则定义如下:

[
    'class' => 'yii\rest\UrlRule',
    'controller' => 'site',
    'pluralize' => false,
    'extraPatterns' => [
        'POST upload-raw-data' => 'uploadRawData'
    ],
]

现在,当我尝试访问这个端点时,我得到了这些结果:

  • 浏览器:没问题
  • 邮递员/POST: 404 错误
  • 邮差/GET:没问题
  • 在启用 enableStrictParsing 的情况下尝试相同的操作时,我到处都是 404 错误。

    如果我需要提供其他部分的代码,我会很乐意提供。

    我想我找到了解决问题的方法。问题似乎出在 CSRF 验证上。

    通过在 beforeAction() 中针对此特定操作禁用它,POST 调用将按预期运行。

    public function beforeAction($action) {
        if ($action->id == 'upload-raw-data')
            Yii::$app->controller->enableCsrfValidation = false;
    
        return parent::beforeAction($action);
    }
    

    来源:https://gist.github.com/guerreiro/9e9cb3154b9047f5d2a0