ASP.NET Web API - команды PUT & DELETE не разрешены - IIS 8

145

Я недавно обновил Visual Studio 2010 до Visual Studio 2012 RC. Программа установки также устанавливает IIS 8 Express, который теперь Visual Studio использует в качестве веб-сервера по умолчанию.

IIS 8 блокирует мои запросы WEB API, которые используют глаголы PUT AND DELETE. IIS возвращает ошибку 405 The requested resource does not support http method 'PUT'.

Я знаю, что у людей были проблемы с этим в прошлом, и есть несколько сообщений об этом в переполнении стека. С IIS 7 Express было решено удалить WebDav. К сожалению, я не вижу способа сделать это с IIS 8.

Я попытался отредактировать разделы WebDav из applicationhost.config, но это не помогло. Например, я удалил <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />из файла конфигурации.

Я потратил слишком много времени на это. Должен быть простой способ включить PUT и DELETE?

отметка
источник
Это все еще сломано в версии RTM. Просто потратил на это 3 часа ... Все, что нужно было добавить дополнительные глаголы ExtensionlessUrl-Integrated-4.0.
Леппи
1
Я не думаю, что это сломано, но по замыслу. Я думаю, что изменение поведения по умолчанию будет мешать WebDAV и нарушит обратную совместимость. Это также не работало с IIS7, когда был установлен WebDAV.
Марк
Я также просто потратил 3 часа на это ... через 6 лет после этого поста.
Брайан Дженкинс
пожалуйста, посмотрите на stackoverflow.com/a/55134621/4746570
BehrouzMoslem

Ответы:

162

Ладно. Я наконец докопался до этого. Вам нужно перепрыгнуть через несколько обручей, чтобы глаголы PUT и DELETE работали правильно с IIS8. Фактически, если вы установите кандидат на выпуск VS 2012 и создадите новый проект WEB API, вы обнаружите, что примеры методов PUT и DELETE возвращают 404 ошибки из коробки.

Чтобы использовать глаголы PUT и DELETE с Web API, вам нужно отредактировать% userprofile% \ documents \ iisexpress \ config \ applicationhost.config и добавить глаголы в обработчик ExtensionlessUrl следующим образом:

Измените эту строку:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

чтобы:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

В дополнение к вышесказанному вы должны убедиться, что WebDAV не мешает вашим запросам. Это можно сделать, закомментировав следующие строки из applicationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Также имейте в виду, что соглашение о веб-API по умолчанию состоит в том, что имя вашего метода должно совпадать с вызванным глаголом HTTP. Например, если вы отправляете запрос на удаление HTTP, ваш метод по умолчанию должен называться Delete.

отметка
источник
9
Для подобных проблем с глаголом OPTIONS в IIS8 (где что-то еще перехватывает перед вашими обработчиками) попробуйте <remove name = "OPTIONSVerbHandler" /> в вашем файле web.config. В связи с этим я бы посоветовал использовать технику «удаления» в вашем локальном web.config, а не связываться с applicationhost.config, когда это возможно, как общее правило
Jason
7
Вместо того, чтобы удалять WebDAV на уровне сервера, который может вызывать эффекты «выбивания», лучше удалить его из вашего проекта, как показано здесь: stackoverflow.com/a/14465655/428280
Twisted
И что потом? Может быть, даже он будет работать локально, но не будет работать на Azure
Toolkit
3
Ответ, который указывает на изменение системных настроек, даже на компьютерах разработчиков, не может быть ответом. Это решает симптом и не очень помогает в командах и на производстве. Будете ли вы повторить это на каждой машине? Проверьте Сантош Сах ответ.
Андре Верланг
Кроме того, мне также нужно было удалить WebDAVModuleиз раздела модулей, согласно ответу Сантоша Саха .
Ивайло Славов
125

Измените файл Web.Config, как показано ниже. Это будет действовать как очарование.

В узле <system.webServer>добавьте ниже часть кода

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

После добавления ваш Web.Config будет выглядеть следующим образом

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>
Сантош Прасад Сах
источник
3
Удаление WebDavModule является правильным способом решения этой проблемы.
MissRaphie
6
Спас мой день: <modules runAllManagedModulesForAllRequests = "true"> <remove name = "WebDAVModule" /> </ modules>
Питер Стегнар,
3
Пользовательские заголовки не нужны, поскольку они связаны с CORS, и таким образом вы создаете дыру в безопасности. Просто часть относительно WebDAVModuleактуальна.
Андре Верланг
2
Этот ответ является правильным, за исключением того, что имя обработчика может отличаться в разных версиях IIS - например, 7.5 использует "ExtensionlessUrlHandler-Integrated-4.0"(как в ответе выше), в то время как IIS 8.5 переименовал его "ExtensionlessUrl-Integrated-4.0"(также упоминается Mark S. Имя обработчика показано на странице ошибок IIS, как только вы получаете сообщение об ошибке, должно быть тривиально знать, какое из них установить. Я использую оба имени для поддержки различных сред хостинга.
Ивайло Славов
7
Это заставляет меня немного умирать внутри каждый раз, когда я вижу это - runAllManagedModulesForAllRequests = "true" - как решение britishdeveloper.co.uk/2010/06/…
Оливер
61

Удаление WebDAV отлично работает для моего случая:

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

всегда лучше решить проблему через web.config, а не пытаться исправить ее через iis или machine.config, чтобы не допустить, чтобы это происходило, если бы приложение размещалось на другом компьютере.

Peter.Wang
источник
Это сработало для меня, где другие по какой-то причине не (были на IIS 8.5), спасибо
Джон
4
Удаление WebDAVModule сработало у меня, нет необходимости удалять обработчик WebDAV (IIS 8.0).
PeterS
3
просто удаление webdav работает над фреймворком 4.6.2 iis8.5
Абдул Рехман Сайед
45

Обновите ваш web.config

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

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

Устраняет необходимость изменять настройки вашего хоста.

Крис Марисик
источник
1
Мне уже написали другую строчку, но она не работала. после добавления строк <remove name = "WebDAVModule" /> и <remove name = "WebDAV" /> он работает. Большое спасибо и 1 голос с моей стороны.
Банкетешвар Нараян
Это работает, но может не сработать из-за блокировки конфигурации, препятствующей использованию <modules> в web.config. В этом случае вы должны отключить блокировку конфигурации в applicationHost.config. Если по какой-то причине у вас нет контроля над applicationHost.config, этот подход использовать нельзя.
Флориан Зима
Работал с IIS10, хотя я просто использовал "*" в качестве глагола
Хавьер Г.
1
Работал с IIS 10 и Web API 2. Работал, должен добавить, после еще десятка "решений", которые я нашел в сети, не стал. Спасибо!
Мэтт Вест
@ChrisMarisic: Это сработало как очарование для меня, спасибо!
Div Tiwari
18

В Asp.Net Web API - webconfig. Это работает во всех браузерах.

Добавьте следующий код в тег System.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Замените тег system.webserver на приведенный ниже код

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

Ganesh
источник
У меня была эта проблема в IIS 7.5, и это исправление работало отлично. Вместо того чтобы удалять весь мой контент system.webserver, я просто объединил соответствующие настройки выше в свои собственные настройки.
Кит Уолтон
38
ВНИМАНИЕ : Раздел пользовательских заголовков в приведенном выше коде позволяет ЛЮБОМУ сайту вызывать ваш API из браузера - что представляет собой большую угрозу безопасности . Читайте о CORS, который эффективно включает эти заголовки.
profMamba
Также была эта проблема на iis 7.5, и это сработало. Обязательно прочитайте вышеизложенное в Инструментарии сообщение о риске, связанном с открытием всех. Также приветствуйте его комментарий, потому что такие лакомые кусочки очень ценны.
sjdirect
Я не думаю, что в этом случае вам вообще нужны пользовательские заголовки. Остальной части system.webserverраздела должно быть достаточно - просто убедитесь, что у вас есть правильное имя для обработчика URL без расширения.
Ивайло Славов
1
@niico Вы должны разрешить только доверенные сайты для Access-Control-Allow-Origin, т.е. замените "*" URL вашего веб-сайта (ов). Это свойство представляет собой белый список всех доверенных сайтов, если только вы не хотите доверять всему вебу (что обычно является плохой идеей).
profMamba
5

это работало для меня на iis8 вместе с некоторыми другими ответами. Моя ошибка была специально для 404.6

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>
Sico
источник
когда вы запускаете AppCmd, это то, что вводит в ваш web.Config (за исключением бита applyToWebDAV).
Чейз Флорелл
5

Просто быстрое обновление для всех, кто может столкнуться с этой проблемой. На сегодняшний день изменение% userprofile% \ documents \ iisexpress \ config \ applicationhost.config больше не работает (до сих пор это работало нормально, не уверен, что это связано с обновлением Windows). После нескольких часов разочарования я изменил web.config, добавив эти обработчики в system.webserver, чтобы он заработал:

<handlers>
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

        <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
Хари
источник
4

Включить CORS (красиво и аккуратно)

1. Добавить CORS Nuget

Install-Package microsoft.aspnet.webapi.cors

2. в файле WebApiConfig.cs для метода Register добавьте следующий код:

config.EnableCors();

пример:
использование System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3.Добавьте приведенный ниже код в пространство имен контроллера, включите get, post, delete, put или любой метод http

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

например:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

ссылка: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Зокаи Хамид
источник
4

После того, как ничего не сработало, я смог решить эту проблему с помощью следующих шагов:

• Не выбирал настройки IIS «WEB DAV PUBLISHING» при установке IIS. • INETMGR - веб-сайт по умолчанию - фильтрация запросов - глаголы HTTP - PUT as True

Аншуман Саурабх
источник
3

После бесконечного поиска и пробования уже предоставленных ответов (добавление глаголов PUT, DELETE и удаление WEBdav) это просто не сработало.

Я пошел в настройки журналов IIS:> Просмотр файлов журнала. В моем случае W3SVC4 был папкой с самой последней датой, открыл папку, посмотрел последний файл журнала и увидел эту запись: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

Метод обновления был указан с глаголом GET, странно, верно? Так что я погуглил для Rejected-By-UrlScan и нашел эту ссылку: UrlScan Broke My Blog .

Я пошел сюда:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

По сути, UrlScan блокирует команды PUT и DELETE. Я открыл этот INI-файл, добавил PUT и DELETE в AllowVerbs и удалил их из списков DenyVerbs. Я сохранил INI-файл, и он работал! Так что для меня эти шаги были необходимы рядом с подсказками ExtensionlessUrlHandler.

Windows Webserver 2008 R2 (64-разрядная версия), IIS 7.5. Я использую это в сочетании с DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Мой метод обновления:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)
DHFW
источник
3

Для PHP это было просто:

  1. Откройте IIS
  2. Перейти к отображению обработчиков
  3. нажмите изменить на php5.6.x или php7.0.x
  4. нажмите «запросить ограничения»
  5. на вкладке глаголов выберите «один из следующих глаголов» и добавьте «GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS»

Я думаю, что это будет работать и с другими обработчиками.

Фрэнк Форте
источник
2

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

public void Delete(int id)
{
 //some code here
}

Если вы столкнулись с повторяющимися ошибками 405, лучше сбросьте сигнатуру метода по умолчанию, как описано выше, и попробуйте.

Конфигурация маршрута по умолчанию будет искать идентификатор в URL. Таким образом, идентификатор параметра здесь важен, если вы не измените конфигурацию маршрута в папке App_Start .

Вы можете изменить тип данных идентификатора, хотя.

Например, приведенный ниже метод должен работать просто отлично:

public void Delete(string id)
{
 //some code here
}

Примечание. Также убедитесь, что вы передаете данные через URL, а не метод данных, который будет содержать полезную нагрузку в качестве основного содержимого.

DELETE http://{url}/{action}/{id}

Пример:

DELETE http://localhost/item/1

Надеюсь, поможет.

Arun
источник
2

Я сталкивался с таким же вопросом с вами, а затем решить ее, Вот решение, я хочу это , возможно , может помочь в
первую очередь

В modulesконфигурации IIS зафиксируйте модуль WebDAVModule , если он есть на вашем веб-сервере, а затем удалите его

второй

В handler mappingsконфигурации IIS вы можете увидеть список разрешающего обработчика, выбрать the PHP item, отредактировать его, на странице редактирования нажать кнопку ограничения запроса, затем выбрать the verbs tabв модальном поле, указать глаголы для метки дескриптора, проверить all verbs radio, затем нажмите кнопку ОК, вы также можете увидеть предупреждение, оно показывает нам, что использовать двойные кавычки для выполнения PHP-CGI, а затем сделать это

если это сделано, то перезапустите сервер IIS, все будет в порядке

введите описание изображения здесь

Chauncery
источник
1
Я только удалил WebDAVModule с сайта IIS, и это сработало для меня
Umair Malhi
1

Я не уверен, что вы редактировали правильный файл конфигурации. Попробуйте следующие шаги

  1. открыть% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config

  2. По умолчанию ниже указанные записи комментируются в файле applicationhost.config. раскомментируйте эти записи.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />
vikomall
источник
4
возиться с applicationhost.config? Нету
Инструментарий
Не следует связываться с другим, кроме файла конфигурации приложения. Во-первых, вы сделаете это для всего сервера и забудете, а потом многие будут удивляться, как он работает на этой машине, а на остальных не работает. Кроме того, если вам не разрешен доступ к файлу конфигурации IIS на сервере, на котором размещено приложение, вам придется решить его в файле web.config. Представьте, что ваше dev-сервер имеет вышеуказанное обновление, будет ли ваш web.config точным? Это отличный способ потерять чей-то день на расследовании, почему производственное развертывание не удалось
Ивайло Славов
1

Вот как вы разрешаете дополнительные HTTP-глаголы с помощью графического интерфейса IIS Manager.

  1. В диспетчере IIS выберите сайт, для которого вы хотите разрешить PUT или DELETE.

  2. Нажмите «Фильтрация запросов». Перейдите на вкладку «HTTP-глаголы».

  3. Нажмите на ссылку «Разрешить глагол ...» на боковой панели.

  4. В появившемся окне введите «УДАЛИТЬ», нажмите «ОК».

  5. Снова нажмите ссылку «Разрешить глагол ...» на боковой панели.

  6. В появившемся поле введите «PUT», нажмите «ОК».

Chaoix
источник
хорошая попытка - что-то другое на этот раз - но все равно не сработало!
ozzy432836
Я перепробовал все остальное, что видел в SO и других местах. Я наконец попробовал это, и это сработало отлично. В моем случае глаголы PUT и DELETE уже были в списке, и мне пришлось сначала удалить их, а затем добавить их обратно, используя ссылку Allow Verb ..., но все же это работало, когда ничего другого не было. Спасибо вам большое!
JTennessen
1

Я использую файл Ashx в приложении MVC, и ни один из приведенных выше ответов не работает для меня. IIS 10.

Вот что сработало. Вместо изменения « ExtensionlessUrl-Integrated-4.0 » в IIS или web.config я изменил « SimpleHandlerFactory-Integrated-4.0 » для файлов « * .ashx »:

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />
RC Cola
источник
0

Другая причина может быть следующей:
я изменил свой Url для метода Web Api в соответствии с этим ответом :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Но этот метод создает ссылку как:

/api/MyApiCtrl?action=MyAction

Это правильно работает с запросами GET и POST, но не с запросами PUT или DELETE.
Поэтому я просто заменил его на:

/api/MyApiCtrl

и это решило проблему.

Nicolai
источник
0

В IIS 8.5 / Windows 2012R2 ничто из упомянутого здесь не работает для меня. Я не знаю, что подразумевается под удалением WebDAV, но это не решило проблему для меня.

Что помогло мне, это следующие шаги;

  1. Я пошел к менеджеру IIS.
  2. В левой панели выбрал сайт.
  3. В левой рабочей области выбрал WebDAV, открыл его двойным щелчком мыши.
  4. В самой правой панели его отключили.

Сейчас все работает.

skillworks
источник
-1

Вы можете конвертировать ваш метод Delete как POST как;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
Теоман Шипахи
источник