Я недавно обновил 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?
источник
ExtensionlessUrl-Integrated-4.0
.Ответы:
Ладно. Я наконец докопался до этого. Вам нужно перепрыгнуть через несколько обручей, чтобы глаголы PUT и DELETE работали правильно с IIS8. Фактически, если вы установите кандидат на выпуск VS 2012 и создадите новый проект WEB API, вы обнаружите, что примеры методов PUT и DELETE возвращают 404 ошибки из коробки.
Чтобы использовать глаголы PUT и DELETE с Web API, вам нужно отредактировать% userprofile% \ documents \ iisexpress \ config \ applicationhost.config и добавить глаголы в обработчик ExtensionlessUrl следующим образом:
Измените эту строку:
чтобы:
В дополнение к вышесказанному вы должны убедиться, что WebDAV не мешает вашим запросам. Это можно сделать, закомментировав следующие строки из applicationhost.config.
Также имейте в виду, что соглашение о веб-API по умолчанию состоит в том, что имя вашего метода должно совпадать с вызванным глаголом HTTP. Например, если вы отправляете запрос на удаление HTTP, ваш метод по умолчанию должен называться Delete.
источник
WebDAVModule
из раздела модулей, согласно ответу Сантоша Саха .Измените файл Web.Config, как показано ниже. Это будет действовать как очарование.
В узле
<system.webServer>
добавьте ниже часть кодаПосле добавления ваш Web.Config будет выглядеть следующим образом
источник
WebDAVModule
актуальна."ExtensionlessUrlHandler-Integrated-4.0"
(как в ответе выше), в то время как IIS 8.5 переименовал его"ExtensionlessUrl-Integrated-4.0"
(также упоминается Mark S. Имя обработчика показано на странице ошибок IIS, как только вы получаете сообщение об ошибке, должно быть тривиально знать, какое из них установить. Я использую оба имени для поддержки различных сред хостинга.Удаление WebDAV отлично работает для моего случая:
всегда лучше решить проблему через web.config, а не пытаться исправить ее через iis или machine.config, чтобы не допустить, чтобы это происходило, если бы приложение размещалось на другом компьютере.
источник
Обновите ваш web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Устраняет необходимость изменять настройки вашего хоста.
источник
В Asp.Net Web API - webconfig. Это работает во всех браузерах.
Добавьте следующий код в тег System.web
Замените тег system.webserver на приведенный ниже код
источник
system.webserver
раздела должно быть достаточно - просто убедитесь, что у вас есть правильное имя для обработчика URL без расширения.это работало для меня на iis8 вместе с некоторыми другими ответами. Моя ошибка была специально для 404.6
источник
Просто быстрое обновление для всех, кто может столкнуться с этой проблемой. На сегодняшний день изменение% userprofile% \ documents \ iisexpress \ config \ applicationhost.config больше не работает (до сих пор это работало нормально, не уверен, что это связано с обновлением Windows). После нескольких часов разочарования я изменил web.config, добавив эти обработчики в system.webserver, чтобы он заработал:
источник
Включить CORS (красиво и аккуратно)
1. Добавить CORS Nuget
2. в файле WebApiConfig.cs для метода Register добавьте следующий код:
пример:
использование System.Web.Http;
3.Добавьте приведенный ниже код в пространство имен контроллера, включите get, post, delete, put или любой метод http
например:
ссылка: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
источник
После того, как ничего не сработало, я смог решить эту проблему с помощью следующих шагов:
• Не выбирал настройки IIS «WEB DAV PUBLISHING» при установке IIS. • INETMGR - веб-сайт по умолчанию - фильтрация запросов - глаголы HTTP - PUT as True
источник
После бесконечного поиска и пробования уже предоставленных ответов (добавление глаголов 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 Мой метод обновления:
источник
Для PHP это было просто:
Я думаю, что это будет работать и с другими обработчиками.
источник
Помимо всех вышеперечисленных решений, проверьте, есть ли у вас идентификатор или какой-либо другой пользовательский параметр в методе DELETE, совпадающий с конфигурацией маршрута.
Если вы столкнулись с повторяющимися ошибками 405, лучше сбросьте сигнатуру метода по умолчанию, как описано выше, и попробуйте.
Конфигурация маршрута по умолчанию будет искать идентификатор в URL. Таким образом, идентификатор параметра здесь важен, если вы не измените конфигурацию маршрута в папке App_Start .
Вы можете изменить тип данных идентификатора, хотя.
Например, приведенный ниже метод должен работать просто отлично:
Примечание. Также убедитесь, что вы передаете данные через URL, а не метод данных, который будет содержать полезную нагрузку в качестве основного содержимого.
Пример:
Надеюсь, поможет.
источник
Я сталкивался с таким же вопросом с вами, а затем решить ее, Вот решение, я хочу это , возможно , может помочь в
первую очередь
В
modules
конфигурации IIS зафиксируйте модуль WebDAVModule , если он есть на вашем веб-сервере, а затем удалите еговторой
В
handler mappings
конфигурации IIS вы можете увидеть список разрешающего обработчика, выбратьthe PHP item
, отредактировать его, на странице редактирования нажать кнопку ограничения запроса, затем выбратьthe verbs tab
в модальном поле, указать глаголы для метки дескриптора, проверитьall verbs radio
, затем нажмите кнопку ОК, вы также можете увидеть предупреждение, оно показывает нам, что использовать двойные кавычки для выполнения PHP-CGI, а затем сделать этоесли это сделано, то перезапустите сервер IIS, все будет в порядке
источник
Я не уверен, что вы редактировали правильный файл конфигурации. Попробуйте следующие шаги
открыть% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
По умолчанию ниже указанные записи комментируются в файле applicationhost.config. раскомментируйте эти записи.
источник
Вот как вы разрешаете дополнительные HTTP-глаголы с помощью графического интерфейса IIS Manager.
В диспетчере IIS выберите сайт, для которого вы хотите разрешить PUT или DELETE.
Нажмите «Фильтрация запросов». Перейдите на вкладку «HTTP-глаголы».
Нажмите на ссылку «Разрешить глагол ...» на боковой панели.
В появившемся окне введите «УДАЛИТЬ», нажмите «ОК».
Снова нажмите ссылку «Разрешить глагол ...» на боковой панели.
В появившемся поле введите «PUT», нажмите «ОК».
источник
Я использую файл Ashx в приложении MVC, и ни один из приведенных выше ответов не работает для меня. IIS 10.
Вот что сработало. Вместо изменения « ExtensionlessUrl-Integrated-4.0 » в IIS или web.config я изменил « SimpleHandlerFactory-Integrated-4.0 » для файлов « * .ashx »:
источник
Другая причина может быть следующей:
я изменил свой Url для метода Web Api в соответствии с этим ответом :
Но этот метод создает ссылку как:
Это правильно работает с запросами GET и POST, но не с запросами PUT или DELETE.
Поэтому я просто заменил его на:
и это решило проблему.
источник
В IIS 8.5 / Windows 2012R2 ничто из упомянутого здесь не работает для меня. Я не знаю, что подразумевается под удалением WebDAV, но это не решило проблему для меня.
Что помогло мне, это следующие шаги;
Сейчас все работает.
источник
Вы можете конвертировать ваш метод Delete как POST как;
источник