使用WordPress REST API删除媒体

问题描述

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

注意:此代码在网站域上而不是其他域上运行。

我尝试过的事情:

这是我正在使用的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可以解决,但遗憾的是,没有。

解决方法

首先,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