使用 WordPress REST API 删除媒体

Posted

技术标签:

【中文标题】使用 WordPress REST API 删除媒体【英文标题】:Deleting media using the WordPress REST API 【发布时间】:2020-12-02 17:23:10 【问题描述】:

我正在尝试使用带有 cookie 身份验证的 rest-api 从 WordPress 库中删除媒体。我可以创建一个文件 (POST) 并检索 (GET) 文件内容,但 DELETE 不起作用。我使用的是 IIS 10.0 版。

注意:此代码在网站域中运行,而不是来自其他域。

我尝试过的事情:

在服务器上启用 WebDAV 使用基本 WordPress 身份验证插件

这是我正在使用的 XMLHttpRequest:

var apiCall = new XMLHttpRequest();

apiCall.onreadystatechange = function() 
...
;

apiCall.open("DELETE", wpApiSettings.root + "wp/v2/media/");
apiCall.setRequestHeader("X-WP-Nonce", wpApiSettings.nonce);
apiCall.send("2000");

我返回的错误:

HTTP Error 401.0 - Unauthorized. You do not have permission to view this directory or page.

GET 或 POST 不会出现此错误,只有在执行删除时才会出现此错误,这让我想到了 IIS 中的身份验证。也许它甚至没有到达 WordPress 引擎,而 IIS 正在拦截请求并拒绝它。我认为启用 WebDAV 会解决这个问题,但遗憾的是,它没有。

【问题讨论】:

【参考方案1】:

首先,401 错误通常表示请求未通过身份验证。我们必须根据 IIS 中的身份验证模式设置凭据。如果它需要基本凭证,我们需要像下面这样设置 HTTP 标头,

xhr.setRequestHeader('Authorization', 'Basic ZWx1c3VhcmlvOnlsYWNsYXZl');

How to send a correct authorization header for basic authentication 另外,为了支持Delete HTTP 动词,请将以下代码添加到您的webconfig 文件中。

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- ADD THIS -->
    </modules>

这是一个相关的讨论。WebAPI Delete not working - 405 Method Not Allowed

【讨论】:

我已经在 IIS 中设置了基本身份验证,但是如果我禁用匿名身份验证,那么网站会在正常主页上显示一个用户名和密码框。有什么方法可以为普通用户设置匿名身份验证,只需访问网站(无需登录),然后通过 REST API 调用基本身份验证。当我尝试在 web.config 中添加该行时。文件中没有模块部分,当我无论如何添加它时,网站不会加载并给我一个配置错误。我可以通过 IIS 手动禁用它吗? 另外,当我通过 IIS 禁用 WebDAV 时,错误变为 405,表示该方法不允许,当我保持启用它时,它是 401。所以也许最好保持启用并配置身份验证? 要使认证方式只对某个文件夹有效,我们只需要展开网站目录,点击具体文件夹,然后设置认证方式即可。这将在 applicationhost.config 文件中添加特定于某个文件夹的身份验证设置。

以上是关于使用 WordPress REST API 删除媒体的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API

如何使用 REST_API wordpress 创建用户?

如何使用 Wordpress Rest Api 获取当前登录用户?

WordPress插件:使用REST API

使用 Fetch 的 WordPress REST API 身份验证

python 使用WordPress Rest API从MemberPress提取数据的脚本