DELETE и PUT запросы к методам ASP.NET MVC контроллера

На сайте ASP.NET MVC есть контроллер с методами:

[HttpGet]
public void Get(int? id) {
// получение объекта
}

[HttpPost]
public void Create(Model model) {
// создание объекта
}

[HttpDelete]
public void Delete(int? id) {
// удаление объекта
}

[HttpPut]
public void Update(int? id, Model model) {
// изменение объекта
}

При обращении к методам AJAX-запросам GET и POST работают корректно, но методы DELETE и PUT не выполняются – возвращается ошибка 401 Unauthorized.

Возможны несколько вариантов решения этой проблемы.

Удалить модуль WebDAV на сервере, где хостится сайт

Удаление выполняется через диспетчер сервера: Win 2012: Управление -> Удалить роли и компоненты. Выбираете текущий сервер.
В списке ролей сервера необходимо убрать галочку с пункта “Публикация WebDAV” 0px

Указать в web.config сайта не использовать модуль WebDAV

В web.config добавить:

<configuration>
  ...
  <system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
      ...
  </system.webServer>
</configuration>

Добавить в web.config настройку runAllManagedModulesForAllRequests

В web.config добавить:

<configuration>
  ...
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
  </system.webServer>
</configuration>

Изменить проверку подлинности сайта

При создании сайта на IIS по-умолчанию включена анонимная проверка подлинности. В некоторых случаях возможно решение проблемы с DELETE и PUT запросами изменением проверки подлинности на другую. Например, Windows или проверку подлинности с помощью форм.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s