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);
}
客户已请求通过 Web 界面和 REST 提供完全相同的端点 API。
只有在登录时才能使用 Web 浏览器看到相同的端点。通过 REST API 访问它时,必须提交有效的访问令牌。
此特定端点的规则定义如下:
[
'class' => 'yii\rest\UrlRule',
'controller' => 'site',
'pluralize' => false,
'extraPatterns' => [
'POST upload-raw-data' => 'uploadRawData'
],
]
现在,当我尝试访问这个端点时,我得到了这些结果:
在启用 enableStrictParsing 的情况下尝试相同的操作时,我到处都是 404 错误。
如果我需要提供其他部分的代码,我会很乐意提供。
我想我找到了解决问题的方法。问题似乎出在 CSRF 验证上。
通过在 beforeAction() 中针对此特定操作禁用它,POST 调用将按预期运行。
public function beforeAction($action) {
if ($action->id == 'upload-raw-data')
Yii::$app->controller->enableCsrfValidation = false;
return parent::beforeAction($action);
}