自定义REST终结点:POST/PUT/PATCH不工作

时间:2021-07-02 作者:CShark

我正在尝试使用一个自定义RESTAPI来处理一些东西。我需要做的一个部分需要对API进行Post/Put。

但是API调用总是在我身上执行404,我不知道为什么。我已经注册了一条测试路线,如下所示

register_rest_route(\'test/v1\', \'test\', array(
    \'method\' => WP_REST_Server::ALLMETHODS,
    \'callback\' => function () {
        return current_user_can("test_metadata_edit");
    },
    \'permission_callback\' => function () {
        return true;
    }
));
我通过内联脚本为Post/Put请求创建一个nonce:

wp_add_inline_script("test_script", \'var nonce = "\' . wp_create_nonce(\'wp_rest\') . \'"\');
直到这里一切都很好。

现在我尝试获取端点,这很有效。如果我根本不提供nonce,它将返回false。如果用户已登录并且我通过以下方式使用生成的nonce_wpnonce= 或者X-WP-Nonce-标头,它返回用户功能的正确结果。但如果我尝试发布、放置或修补,它总是返回404,我完全不知道为什么。但是,如果我为注销的用户创建nonce,则会得到403。

fetch(\'/wp-json/test/v1/test\', { method: \'GET\', headers: {\'X-WP-Nonce\': \'12345\'}}) //works
fetch(\'/wp-json/test/v1/test?_wpnonce=12345\', { method: \'GET\'}}) //works
fetch(\'/wp-json/test/v1/test\', { method: \'POST\', headers: {\'X-WP-Nonce\': \'12345\'}) //does not work, 404
fetch(\'/wp-json/test/v1/test?_wpnonce=12345\', { method: \'PUT\' }) //also doesn\'t work, 404
对发生的事情有什么想法吗?

1 个回复
最合适的回答,由SO网友:bosco 整理而成

这个\'method\' 的参数register_rest_route() 应命名为\'methods\'. 由于输入错误,参数被解释为其默认值-\'GET\' 只有