Ошибка HTTP 405.0-метод не разрешен в IIS Express
при выпуске идеально cromulent глагола на локальный веб-сайт IIS Express в Visual Studio 2013:
CROMULENT http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
сервер отвечает с ошибкой:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
это просьба к "универсальный обработчик" (т. е. .ashx
). Если я попробую еще раз а статический источник:
SCHWIFTY http://localhost:7579/Default.htm HTTP/1.1
Host: localhost:7579
сервер отвечает с ошибкой:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
это все путем попытки использовать HTTP глаголы:
DELETE http://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
PUThttp://localhost:7579/Handler.ashx HTTP/1.1
Host: localhost:7579
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
этот вопрос был задан до смерти, иногда со мной. Но никто никогда не находил решения.
вопрос>
ошибка Microsoft
проблема в том, что Microsoft отправляет IIS и IISExpress по умолчанию. Вместо обработки HTTP-глаголов, как это требуется для веб-сервера, они не обрабатывают глаголы.
это легче всего увидеть при управлении полными IIS работает на Windows Server. Выберите любой из встроенных обработчиков (например, обработчик cshtml), и вы увидите, что кто-то думал, что это будет веселый если бы это работало только с GET
, HEAD
, POST
и DEBUG
глаголы:
вместо правильной реализации поддержки HTTP на HTTP-сервере.
возникает вопрос:
- почему ровно не работает
- как ровно исправить
- как исправить это в IIS Express (без каких-либо инструментов управления)
- почему оно продолжается быть погруженным, год за годом, сломленным
Вопрос 1. Почему это не работает?
первый вопрос в том, почему это не работает. Давайте посмотрим на сервер IIS, где мы убрали все обработчик, кроме основного статический файл обработчик:
обработчик настроен на all все глаголы:
единственный оставшийся обработчик настроен на allow любой глагол. Но если мы отправим запрос на веб-сервер, мы получим ошибку:
DELETE http://scratch.avatopia.com/ HTTP/1.1
Host: scratch.avatopia.com
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Server: Microsoft-IIS/7.5
почему это происходит?
почему это работа? Где параметр конфигурации, который говорит:
GET
HEAD
OPTIONS
TRACE
потому что сам сервер говорит, что это единственные поддерживаемые глаголы.
но если мы изменим его к GET
он отлично работает:
GET http://scratch.avatopia.com/ HTTP/1.1
User-Agent: Fiddler
Host: scratch.avatopia.com
HTTP/1.1 200 OK
Content-Type: text/html
Вопрос 2. Как это исправить?
общяя премудрость-убрать WebDAV. Никто не знает, что WebDAV-это, как это может быть проблемой, почему это проблема, или почему она существует, если она только вызывает проблемы. WebDAV можно удалить как обработчик из пользовательского интерфейса администрирования IIS:
что это одинаковых добавлять remove
запись на web.config
(сам пользовательский интерфейс добавляет запись в web.config для тебя):
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
только это не работает. Так как мы исправить это?
начиная с IIS кажется, что WebDAV стал еще более вирусом. Вместо того, чтобы просто отключить его как обработчик,вы должны полностью установить или удалить его как модуль:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
это звучит как идея причины, за исключением моего тестового случая, на IIS 7.5, WebDAV не установлен и удален как модуль:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 10 May 2016 19:19:42 GMT
Content-Length: 0
Итак, если мы сможем выяснить, как решить проблему, мы можем ответить на вопрос номер два.
Вопрос 3. Как это исправить в IIS Express
начиная с Visual Studio 20131, Visual Studio больше не использует мини-веб-сервер под названием Cassini. Он использует портативную установку самого IIS Express (т. е. функция IIS Express Windows не должна быть установлена).
большинство вышеуказанных исправлений (попыток) (сбой) в IIS. Но никто не занимался ими в IIS Express Visual Studio 2013 (вот как этот вопрос отличается от любых других).
Вопрос 4. Почему это происходит?
прошло более 15 лет, и это все еще продолжается. Должно быть хороший причина, по которой IIS не работает как веб-сервер. Но что это? Я не смог найти статью базы знаний или сообщение в блоге, объясняющее, почему команда IIS отказывается работать правильно.
Бонус Чтение
- самый популярный вопрос Stackoverflow для этого проблема:ASP.NET веб-API-PUT & DELETE глаголы не разрешены-IIS 8
Исследования
- ошибка HTTP 405.0-метод не разрешен, с POST (нет ответа, php)
- ошибка HTTP 405.0-метод не разрешен (нет ответа)
- пост глагол не допускается (php)
- ошибка HTTP 405.0-метод не допускается ASP.net MVC5 (нет ответа, mvc)
- jQuery File Uploader = ошибка 405 IIS8.5 (jquery нет ответа)
- IIS 7.5 405 метод не допускается для PUT из StaticFileModule (нет ответа, статический модуль, iis)
- сообщение http-глагола, используемое для доступа к пути, не разрешено ("не использовать глаголы")
- ошибка http 405 метод не допускается ошибка с web.В API (удалить WebDAV; уже нет)
- обработка Perl IIS 7.5 (perl)
- HTTP Error 405.0-метод не разрешен с помощью jQuery ajax get (ajax)
- что вызывает ошибку HTTP 405 "недопустимый метод (HTTP verb)" при публикации формы на PHP Службы IIS? (iis6, ftp, php)
- http://forums.asp.net/t/1648594.aspx ("вы пробовали пинговать свой компьютер")
- Angular $resource POST / PUT to WebAPI 405 метод не разрешен (попробуйте удалить WebDAV handlder и модуль WebDAV)
- ошибка Http 405.0-метод не разрешен модуль iis 7.5 staticfilemodule (нет решение)
- не удалось настроить WebDAV с IIS 7 *(пытается настройка webdav)*
- Android SOAP запрос возвращает HTTP-ответ 405 (нет решения)
- служба wcf не разрешает POST (wcf)
- WebAPI удалить не работает-405 метод не допускается (WebAPI; удалить Протокол WebDAV)
2 ответов
я, кажется, подхватил немного разочарования в вопросе, так что фактический вопрос немного неясен. Что конкретно вы пытаетесь, но не можете сделать? Чего вы ждете от ответа?
в любом случае, основываясь на этом комментарии в вопросе:
это все путем попытки использовать HTTP-глаголы:
и соответствующие образцы с участием универсального обработчика, я возьму удар на показ того, что необходимо сделать это возможным PUT
и DELETE
общий обработчик.
для того чтобы PUT
и DELETE
на общем обработчике вы должны разрешить его в web.config
приложения. Для этого вы должны зарегистрировать обработчик для *.ashx
следующим образом:
<system.webServer>
<handlers>
<add name="SimpleHandlerFactory-Integrated-WithPutDelete"
path="*.ashx"
verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
type="System.Web.UI.SimpleHandlerFactory"
resourceType="Unspecified"
requireAccess="Script"
preCondition="integratedMode" />
</handlers>
</system.webServer>
в зависимости от того, как вы изначально настроили веб-сайт / приложение, может быть или не быть обработчика, зарегистрированного для type="System.Web.UI.SimpleHandlerFactory"
в своем . Если есть один, вы должны иметь возможность просто изменить эта запись и добавьте глаголы, которые вы хотите разрешить.
Вы заметите, что эта запись имеет preCondition="integratedMode"
. Я считаю, что это должно работать при отладке в Visual Studio с помощью IIS Express. В реальном развертывании IIS регистрацию обработчика может потребоваться изменить в соответствии с пулом приложений, который будет запускать приложение. Для приложения, работающего в классическом режиме (не интегрированном), это будет выглядеть примерно так (не протестировано, поэтому может быть неправильно):
<system.webServer>
<handlers>
<add name="SimpleHandlerFactory-ISAPI-4.0_64bit-WithPutDelete"
path="*.ashx"
verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
modules="IsapiModule"
scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
preCondition="classicMode,runtimeVersionv4.0,bitness64"
responseBufferLimit="0" />
</handlers>
</system.webServer>
точное подробности будут зависеть от версии фреймворка битов пула приложений.
если вы отлаживаете в Visual Studio с помощью IIS Express, вы должны взглянуть на applicationhost.config
который устанавливает много значений по умолчанию для IIS Express. Он расположен в:
My Documents\IISExpress\config
непроверенная Регистрация обработчика выше для классического пула приложений конвейера является небольшой модификацией регистрации обработчика в этом файле. В моей среде есть 6 отдельных записей для *.ashx
, с различными предварительными условиями, в этом файле.
было бы неплохо явно удалить все это в вашем web.config
если вы хотите иметь свою собственную регистрацию, которая позволяет PUT
и DELETE
. Не все из них действительно активный/зарегистрировано одновременно с предпосылки (как я предполагаю) взаимоисключающие, но, по крайней мере для меня это работает, чтобы просто удалить их все, один за другим. В моей среде раздел с удалениями выглядит так это:
<remove name="SimpleHandlerFactory-ISAPI-4.0_64bit"/>
<remove name="SimpleHandlerFactory-ISAPI-4.0_32bit"/>
<remove name="SimpleHandlerFactory-Integrated-4.0"/>
<remove name="SimpleHandlerFactory-Integrated"/>
<remove name="SimpleHandlerFactory-ISAPI-2.0"/>
<remove name="SimpleHandlerFactory-ISAPI-2.0-64"/>
надеюсь, что это светит хотя бы немного света в темные места!
хорошо, поэтому я столкнулся с этой же точной проблемой на IIS 7.5 при попытке поместить или удалить его, вернув 405.
Я специально пытался настроить средний стек с модулем IISnode. при доступе к статическому HTML-файлу IIS обслуживал я смог получить и нажать, но не поставить или удалить.
-- проблема --
Я считаю, что проблема заключается в самом сервере IIS. взгляните на этот пост здесь:
https://support.microsoft.com/en-us/kb/2021641
похоже, что IIS больше не позволяет анонимно ставить или удалять
поэтому в конце концов я просто пошел с веб-сервером nodejs вместо
-- однако --
Я не пробовал это, но, возможно, вы захотите изучить изменение Сам файл конфигурации системы IIS называется ApplicationHost.конфигурация, расположенная здесь:
C:\Windows\System32\inetsrv\config
обязательно используйте блокнот с правами администратора
дайте мне знать, как это происходит, и я могу попытаться сделать это позже, когда у меня будет время