Magento 2.4.6-p1添加商品到购物车报错:GET方法无法访问请求URI
错误日志
[2023-08-07T02:38:55.058044+00:00] main.DEBUG: URI '/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYmVzdWlnZW5lcmlzLmNvbS92MjQ2djEvYi1jLWluc3BpcmUtZTE1MC5odG1s/product/1/'' cannot be accessed with GET method (Magento\Checkout\Controller\Cart\Add) [] []
[2023-08-07T02:38:55.060439+00:00] main.DEBUG: Request validation failed for action "Magento\Checkout\Controller\Cart\Add\Interceptor" {"exception":"[object] (Magento\Framework\App\Request\InvalidRequestException(code: 0): Invalid request received at /home/public_html/vendor/magento/framework/App/Request/HttpMethodValidator.php:69)"} []
问题原因
Magento 2.4.6-p1 中,/checkout/cart/add 接口仅允许POST请求,你的请求使用了GET方法,触发了系统的请求验证机制,导致报错。
解决步骤
- 检查前端加购触发逻辑:确认商品页的"加入购物车"按钮是否通过GET方式发起请求。默认Magento的加购按钮是通过form表单以POST提交,若为自定义a标签或链接,需改为form POST提交,或调整触发逻辑为POST请求。
- 排查第三方扩展/自定义主题:近期安装的扩展或定制主题可能修改了加购请求方式,先禁用所有第三方扩展,切换到Luma默认主题测试,确认是否为扩展/主题导致的问题。
- 验证控制器配置:检查
app/code/Magento/Checkout/Controller/Cart/Add.php文件,确保该控制器未被修改请求方法限制。默认该控制器仅允许POST请求,若有自定义修改,恢复默认代码。 - 检查URL生成逻辑:若为自定义模块生成加购URL,需使用Magento官方的URL生成器,且配合POST请求提交,不能直接通过GET参数拼接访问
/checkout/cart/add接口。
内容的提问来源于stack exchange,提问作者Alaldin

