【问题标题】:Deleting media using the WordPress REST API使用 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 会解决这个问题,但遗憾的是,它没有。

【问题讨论】:

    标签: wordpress rest iis media wp-api


    【解决方案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 文件中添加特定于某个文件夹的身份验证设置。
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多