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 ]

2 голосов
/ 16 сентября 2017

Причина ошибки 500!

Привет всем,

Я тоже хочу опубликовать собственное исследование, надеюсь, оно поможет будущим энтузиастам.Как предлагается в ответах, я не могу удалить WebDav, поэтому я добавил строку ниже в веб-конфигурации (из других ответов)

 <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>

, но я получил ошибку 500, когда я включил режим отладки, нашел это

 Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'ExtensionlessUrlHandler-Integrated-4.0'

Ответ

Это потому, что уже существовал ExtensionlessUrlHandler в разделе отображений обработчика, для устранения проблемы выполните следующие действия.

Метод 1

1) Перейдите в диспетчер IIS и выберите приложение

2) Перейдите к функции сопоставления обработчиков

3) Найдите ExtensionlessUrlHandler-Integrated-4.0 и удалите его.

4) Добавьте ExtensionlessUrlHandler в свою веб-конфигурацию (как упоминалось в ответах выше)

<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>

Метод 2

1) Удалите обработчик ExtensionlessUrl из веб-конфигурации

2) Нажмите свое приложение на IIS Server, перейдите к HandlerMappings

3) Найдите ExtensionlessUrlHandler-Integrated-4.0 (только это имяигнорируйте других)

4) щелкните правой кнопкой мышиd выберите Редактировать

Редактировать обработчик

5) Нажмите «Запретить ограничения» и выберите вкладку «Глаголы» и выберите «Все глаголы

», это активирует обработчик без расширенийразрешить все глаголы.

Я пойду с методом 1, так как мы можем иметь контроль в web.config.Но обязательно проверьте сервер развертывания на наличие дубликатов определений обработчиков.

1 голос
/ 21 октября 2017

Мой web.config с ядром asp.net 1.0

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>
1 голос
/ 14 февраля 2016

В Windows Server 2012 . Откройте applicationHost.config файл в блокноте с правами администратора

applicationHost.config Файл находится в C: \ Windows \ System32 \ inetsrv \ config

Найдите раздел

 <verbs allowUnlisted="false" applyToWebDAV="true">
   <add verb="GET" allowed="true" />
   <add verb="HEAD" allowed="true" />
   <add verb="POST" allowed="true" />
   <add verb="DELETE" allowed="false" />
   <add verb="TRACE" allowed="false" />
   <add verb="PUT" allowed="false" />
   <add verb="OPTIONS" allowed="false" />
</verbs>

Обратите внимание: для команд DELETE и PUT HTTP установлено значение false. Измените их на истинные.

Теперь оно должно читаться как ниже

 <verbs allowUnlisted="false" applyToWebDAV="true">
   <add verb="GET" allowed="true" />
   <add verb="HEAD" allowed="true" />
   <add verb="POST" allowed="true" />
   <add verb="DELETE" allowed="true" />
   <add verb="TRACE" allowed="false" />
   <add verb="PUT" allowed="true" />
   <add verb="OPTIONS" allowed="false" />
</verbs>

Сохраните файл. Вы включили запросы HttpPut и HttpDelete на своем веб-сервере

...