404 Отклонен запрос на удаление UrlScan

В моем веб-API у меня есть несколько функций [HttpGet], которые работают отлично, но функция [HttpDelete] (на том же контроллере) не работает, она возвращает ошибку 404.

[Authorize]
[RoutePrefix("Users")]
public class UsersController : ApiController
{
    [HttpDelete]
    [Route("DeleteUser/{ID}")]
    public void Delete(int id)
    {
        _UserRepository.Delete(id);
    }
}

В web.config у меня verb установлено значение *:

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
      <remove name="FormsAuthentication" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

AJAX-вызов:

deleteUser = function (id, callback) {
    $.ajax({
        url: "../../API/Users/DeleteUser/" + id,
        type: "DELETE",
        success: function () {
            callback;
        }
    });
}

Ошибка:

Ошибка HTTP 404.0 — модуль подробной информации об ошибке не найден. Уведомление веб-ядра IIS Обработчик MapRequestHandler StaticFile

Код ошибки 0x80070002

Запрошенный URL-адрес https://www.example.com:443/Rejected-By-UrlScan?~/API/Users/DeleteUser/155

Физический путь d:\wr\mySite\example.com\Rejected-By-UrlScan Метод входа в систему Анонимный вход Анонимный пользователь

Все вызовы аутентифицируются с помощью аутентификации OWIN и токена носителя.

Пример рабочего звонка на той же странице:

getUsers = function (callback) {
    $.get("../../API/Users/GetUsers/", callback);
}

Что может вызвать это?


person user3378165    schedule 03.07.2017    source источник
comment
Можете ли вы включить больше контроллера, например его определение, и есть ли у него какие-либо атрибуты. Также покажите необработанный ответ при отправке запроса, который не удался.   -  person Nkosi    schedule 05.07.2017
comment
Вы аутентифицированы при отправке запроса? Замечающий контроллер помечен атрибутом [Authorize]   -  person Nkosi    schedule 05.07.2017
comment
Покажите один из вызовов, которые работают в продакшене   -  person Nkosi    schedule 05.07.2017
comment
@Nkosi Пожалуйста, посмотрите мой отредактированный вопрос.   -  person user3378165    schedule 06.07.2017
comment
В зависимости от вашей версии IIS вам следует взглянуть на этот вопрос 8" title="asp net web api поставить глаголы удаления не разрешены iis 8"> stackoverflow.com/questions/10906411/   -  person Nkosi    schedule 12.07.2017
comment
Версия IIS - 7.5, я видел этот вопрос и пробовал все, что там предлагалось, но безуспешно, веб-сайт находится на общем сервере, поэтому доступ к нему немного затруднен.   -  person user3378165    schedule 12.07.2017


Ответы (2)


Как указано в другом сообщении, может быть расширение (UrlScan), настроенный в IIS для блокировки запросов DELETE. Вы можете проверить свой IIS на наличие этого расширения.

person Subbu    schedule 20.07.2017
comment
В моем случае это сработало. Я только что удалил Microsoft UrlScan Filter с помощью панели управления Windows. - person educoutinho; 09.11.2018

Попробуйте установить глаголы вручную

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
      <remove name="FormsAuthentication" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" 
           path="*." 
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT" 
           type="System.Web.Handlers.TransferRequestHandler" 
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

Также проверьте, чтобы убедиться

  • Что вы называете правильный путь.

  • у вас нет папки, соответствующей предполагаемому маршруту


Кроме того, заполнитель вашего шаблона маршрута должен соответствовать имени параметра действия.

[Authorize]
[RoutePrefix("Users")]
public class UsersController : ApiController {

    [HttpDelete]
    [Route("DeleteUser/{id:int}")] //Matches DELETE {root}/Users/DeleteUser/5
    [AcceptVerbs("DELETE")]
    public IHttpActionResult Delete(int id) {
        //TODO: check if {id} exists and if not, then return NotFound()
        _UserRepository.Delete(id);
        return Ok();
    }

    //...other members
}
person Nkosi    schedule 05.07.2017
comment
В зависимости от вашей версии IIS вам следует взглянуть на этот вопрос 8" title="asp net web api поставить глаголы удаления не разрешены iis 8"> stackoverflow.com/questions/10906411/ - person Nkosi; 12.07.2017
comment
Версия IIS - 7.5, я видел этот вопрос и пробовал все, что там предлагалось, но безуспешно, веб-сайт находится на общем сервере, поэтому доступ к нему немного затруднен. - person user3378165; 13.07.2017