Удаление мультимедиа с помощью WordPress REST API

Я пытаюсь удалить мультимедиа из библиотеки WordPress, используя rest-api с аутентификацией cookie. Я могу создать файл (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 исправит ситуацию, но, к сожалению, этого не произошло.


person Programmer    schedule 12.08.2020    source источник


Ответы (1)


Во-первых, ошибка 401 обычно указывает на то, что запрос не прошел проверку подлинности. Мы должны настроить учетные данные на основе режима аутентификации в IIS. Если для этого требуются базовые учетные данные, нам нужно настроить заголовок HTTP, как показано ниже:

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

Как отправить правильный заголовок авторизации для базовой аутентификации
Кроме того, для поддержки HTTP-команды Delete добавьте приведенный ниже код в файл webconfig.

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

Вот соответствующее обсуждение.
Удаление WebAPI не работает — 405 Метод не разрешен

person Abraham Qian    schedule 13.08.2020
comment
Я настроил базовую аутентификацию в IIS, но если я отключу анонимную аутентификацию, веб-сайт отобразит окно имени пользователя и пароля на обычной домашней странице. Есть ли способ настроить анонимную аутентификацию для обычных пользователей, которые просто заходят на веб-сайт (для которого не требуется вход в систему), а затем использовать обычную аутентификацию для вызова через REST API. Когда я попытался добавить эту строку в файл web.config. В файле не было раздела модулей, и когда я его добавил, сайт все равно не загружался и выдавал ошибку конфигурации. Я могу отключить его через IIS вручную? - person Programmer; 17.08.2020
comment
Кроме того, когда я отключаю WebDAV через IIS, ошибка меняется на 405, говоря, что метод не разрешен, когда я оставляю его включенным, это 401. Так что, может быть, лучше оставить его включенным и просто настроить аутентификацию? - person Programmer; 17.08.2020
comment
Чтобы сделать метод аутентификации эффективным только для определенной папки, нам нужно всего лишь развернуть каталог веб-сайта, щелкнуть конкретную папку, а затем установить режим аутентификации. Это добавит параметры аутентификации, относящиеся к определенной папке в файле applicationhost.config. - person Abraham Qian; 18.08.2020
comment
‹location path=MyWebsite/Scripts› ‹system.webServer› ‹security› ‹authentication› ‹basicAuthentication enabled=true /› ‹anonymousAuthentication enabled=false /› ‹/authentication› ‹/security› ‹/system.webServer› ‹/location › - person Abraham Qian; 18.08.2020