IIS 7.5 + включает PUT и DELETE для службы RESTFul, без расширения - PullRequest
55 голосов
/ 19 июля 2011

Я пытаюсь понять, как IIS 7.5 обрабатывает запросы POST и PUT.

Я пишу сервис RESTful с использованием фреймворка OpenRasta.Операция POST работает без каких-либо проблем, но операция PUT для того же URL-адреса не работает.Он возвращает ошибку, подобную следующей

Detailed Error Information
Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error Code: 0x80070002

URL-адрес выглядит следующим образом: * http://localhost/MyService/Resource.Something.manifest"

Та же настройка отлично работает в Visual Studio Development IIS.

Решение

По существу, ExtensionlessUrlHandler по умолчанию не принимает команды PUT и DELETE. Просто нужно добавить их.

<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

Ответы [ 13 ]

74 голосов
/ 29 апреля 2013

Чтобы получить разрешение PUT и DELETE для IIS 7.5 для API REST fast-CGI на основе PHP 5.4, мне пришлось отключить WebDAV-модуль. В противном случае модуль WebDAV вмешивается в HTTP-запросы, используя PUT или DELETE. Однако, чтобы получить эту работу, было немного запутанно, и я мог пропустить некоторые шаги или сделать это в другом порядке.

Эти строки помещаются как дочерние элементы <system.webServer> -элемента в web.config в корне приложения.

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

Надеюсь, что это избавит от разочарования. Похоже, что по умолчанию для сервера принимается любой HTTP-глагол, которого нет в списке - см. Настройки в Request filtering -> HTTP Verbs -> Edit feature Settings. Можно рассмотреть возможность явного добавления VERBS, которые должны быть разрешены. Допустимые глаголы могут быть указаны с добавлением этого фрагмента, также как потомок <system.webServer>.

    <security>
        <requestFiltering>
            <verbs allowUnlisted="false">
                <add verb="GET" allowed="true" />
                <add verb="POST" allowed="true" />
                <add verb="DELETE" allowed="true" />
                <add verb="PUT" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>

На клиентском компьютере модуль WebDAV можно удалить отсюда:

Control Panel -> Uninstall Program -> Turn Windows features on or off -> IIS -> World Wide Web Services -> Common HTTP feautre -> WebDAV Publishing

Последняя мера, чтобы заставить его работать, была путем редактирования applicationhost.config, найденного в C:\Windows\System32\inetsrv\config. В <system.webServer> -> <handlers> вы увидите запись php, которая имеет всего verb="GET,HEAD,POST - измените ее, чтобы добавить нужные вам глаголы, например ::

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,PUT,DELETE,POST"/>
                                                                 |
                                                                 |
                                                                 |
append verbs here  ----------------------------------------------|
29 голосов
/ 05 февраля 2015

1. Перейдите в IIS Manager.
2.Нажмите на ваше приложение.
3. Перейдите в раздел «Отображения обработчиков».
4.В списке функций дважды щелкните «WebDAV».
5.Нажмите «Ограничения запроса».
6.В закладке «Глаголы» выберите «Все глаголы».
7. Нажмите ОК.

11 голосов
/ 15 августа 2011

См. http://learn.iis.net/page.aspx/901/iis-express-faq/, который связан с вики ИЛИ.

По ссылке (для удобства чтения не указано в кавычках):

A: Вы можете изменить IIS ExpressapplicationHost.config в папке %userprofile%\documents\IISExpress\config.Например, чтобы включить PUT и DELETE для Urls без расширений, прокрутите вниз до конца файла IIS Express applicationHost.config и найдите запись обработчика, которая начинается с:

<add name="ExtensionlessUrl-Integrated-4.0"

Inатрибут verb добавляет PUT и DELETE, поэтому атрибут verb выглядит следующим образом: verb="GET,HEAD,POST,DEBUG,PUT,DELETE".

9 голосов
/ 17 июня 2016

Мой сценарий был веб-приложением на веб-сайте IIS 7.5.Веб-сайт должен был продолжать активировать WebDAV, но веб-приложение должно было отключить его, чтобы поддерживать PUT и DELETE в его REST API.

Чтобы это работало, веб-приложению Web.config необходимо:

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

<handlers>
  <remove name="WebDAV" />
</handlers>

Важным отличием от других ответов здесь является необходимость runManagedModulesForWebDavRequests = "true"

7 голосов
/ 13 августа 2013

Для меня это делает трюк в web.config.

<system.webserver>
    <handlers>
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
<system.webserver/>

<system.web>
  <authentication mode="Windows" />
  <identity impersonate="true"/>
<system.web/>

Я использовал следующую конфигурацию:

  • IIS 7,5
  • Windows Server 2008 R2
  • Пул пользовательских приложений, .NET 4.0, Интегрированный
  • Аутентификация Windows = true
  • Анонимная аутентификация = false

Надеюсь, это поможет. ; -)

6 голосов
/ 05 января 2014

пользователей инструмента URLScan

Если другие ответы по-прежнему не работают и вы получаете 404 ошибку : эти глаголы могут быть явно отклонены инструментом URLScan , еслиу вас это установлено.

Вы можете настроить [AllowVerbs] и [DenyVerbs] разделы файла URLScan.ini в соответствии с вашими потребностями.

Остерегайтесь угроз безопасности включения этих глаголов.

5 голосов
/ 11 апреля 2014

Для меня сработало полное удаление WebDav.

4 голосов
/ 17 июля 2014

Переход к отображению обработчика и настройка WebDAV для обработки всех глаголов - единственное, что сработало для меня, несмотря на то, что PUT и DELETE уже были перечислены в качестве обработанных глаголов.Рабочий 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" />
      <remove name="WebDAV" />
      <add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
    </handlers>
  </system.webServer>
3 голосов
/ 09 июля 2014

Я пытался в IIS 8.

  • ** удалить WebDav Publishing

    Шаги для удаления -> Панель управления -> Перейти к программам и функциям -> Повернуть окнавключить или выключить-> Выбрать Internet Information Services-> World Wide Web Services-> Общие функции HTTP -> «Удалить» публикацию WebDAV, сняв флажок с опции WebDAV **

3 голосов
/ 20 июля 2012

в web.config

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

вы также можете использовать пользовательский интерфейс управления IIS и определить его глобально или веб-сервер по умолчанию

...