问题描述
我正在尝试使用带有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>