Ошибка 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 глаголы:

enter image description here

вместо правильной реализации поддержки HTTP на HTTP-сервере.

возникает вопрос:

  • почему ровно не работает
  • как ровно исправить
  • как исправить это в IIS Express (без каких-либо инструментов управления)
  • почему оно продолжается быть погруженным, год за годом, сломленным

Вопрос 1. Почему это не работает?

первый вопрос в том, почему это не работает. Давайте посмотрим на сервер IIS, где мы убрали все обработчик, кроме основного статический файл обработчик:

enter image description here

обработчик настроен на all все глаголы:

enter image description here

единственный оставшийся обработчик настроен на 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:

enter image description here

что это одинаковых добавлять 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://blogs.msdn.microsoft.com/saurabh_singh/2010/12/10/anonymous-put-in-webdav-on-iis-7-deprecated/

https://support.microsoft.com/en-us/kb/2021641

похоже, что IIS больше не позволяет анонимно ставить или удалять

поэтому в конце концов я просто пошел с веб-сервером nodejs вместо

-- однако --

Я не пробовал это, но, возможно, вы захотите изучить изменение Сам файл конфигурации системы IIS называется ApplicationHost.конфигурация, расположенная здесь:

C:\Windows\System32\inetsrv\config

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

дайте мне знать, как это происходит, и я могу попытаться сделать это позже, когда у меня будет время