IIS 7.5 + enable PUT and DELETE pour un service reposant, extensionless

j'essaie de comprendre comment IIS 7.5 gère les requêtes POST et PUT.

j'écris un service reposant en utilisant OpenRasta framework. L'opération POST fonctionne sans aucun problème, mais L'opération PUT pour la même URL ne fonctionne pas. Il renvoie l'erreur comme la suivante

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

l'url est comme ceci "http://localhost/MyService/Resource.Quelque.manifeste 151930920"

même configuration qui fonctionne bien dans visual studio développement IIS.

Solution

fondamentalement, le ExtensionlessUrlHandler par défaut n'accepte pas le verbe PUT et DELETE. Juste besoin de les ajouter.

<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="C:WindowsMicrosoft.NETFramework64v4.0.30319aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
52
demandé sur Eatdoku 2011-07-19 00:38:19

13 réponses

pour être mis et supprimé pour être accepté par IIS 7.5 Pour une API REST pilotée par PHP 5.4, j'ai dû désactiver le module WebDAV. Dans le cas contraire, le module WebDAV intervient dans les requêtes HTTP en utilisant PUT ou DELETE. Pour obtenir ce travail était cependant un peu déroutant et je pourrais avoir manqué quelques étapes ou l'a fait dans un autre ordre.

ces lignes sont placées en tant qu'enfants de l'élément <system.webServer> - dans web.config dans la racine de l'application.

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

espère que cela évitera un peu de frustration. Il semble que le paramètre par défaut pour le serveur est d'accepter tout verbe HTTP non listé - voir Paramètres sous Request filtering -> HTTP Verbs -> Edit feature Settings . On peut envisager d'ajouter explicitement les VERBES qui sont autorisés. Les verbes autorisés peuvent être spécifiés en ajoutant cet extrait, également en tant qu'enfant de <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>

sur une machine client on peut désinstaller le module WebDAV d'ici:

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

la dernière mesure pour le faire fonctionner a été en éditant applicationhost.config trouvé dans C:\Windows\System32\inetsrv\config . Dans <system.webServer> -> <handlers> vous verrez une entrée php qui a juste verb="GET,HEAD,POST - le modifier pour ajouter les verbes que vous avez besoin, par exemple:

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,PUT,DELETE,POST"/>
                                                                 |
                                                                 |
                                                                 |
append verbs here  ----------------------------------------------|
72
répondu John P 2018-07-31 08:19:51

1.Allez à Gestionnaire des services IIS.

2.Cliquez sur votre application.

3.Allez à "handler Mappings".

4.Dans la liste des fonctionnalités, double-cliquez sur "WebDAV".

5.Cliquez sur"Request Restrictions".

6.Dans l'onglet "Verbes", sélectionnez "Tous les verbes" .

7.Appuyez sur OK.

27
répondu Jalaa Zahwa 2015-02-05 13:16:10

voir http://learn.iis.net/page.aspx/901/iis-express-faq / qui est lié à partir du ou wiki.

du lien (non cité En bloc pour la lisibilité):

A: vous pouvez modifier L'IIS Express applicationHost.config dans le dossier %userprofile%\documents\IISExpress\config . Par exemple, pour activer PUT et DELETE pour les Urls sans extension, faites défiler jusqu'au bas du fichier IIS Express applicationHost.config et recherchez une entrée du gestionnaire qui commence par:

<add name="ExtensionlessUrl-Integrated-4.0" ...

dans l'attribut verb ajouter PUT et DELETE de sorte que l'attribut verb ressemble à: verb="GET,HEAD,POST,DEBUG,PUT,DELETE" .

11
répondu SerialSeb 2012-04-12 10:06:07

Pour moi, cela fait le tour du 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/>

j'ai utilisé la configuration suivante:

  • IIS 7.5
  • Windows Server 2008 R2
  • Personnalisée Pool D'Applications .NET 4.0, Intégré
  • authentification Windows = true
  • Authentification Anonyme = false

J'espère que ça aidera. ;- )

7
répondu user2084570 2013-08-13 14:26:45

mon scénario était une application web dans un site web sur IIS 7.5. Le site web devait continuer à activer WebDAV, mais l'application web devait l'désactiver afin de prendre en charge PUT et DELETE dans son API REST.

pour que cela fonctionne, le Web de l'application web.config avait besoin de ceci:

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

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

la différence importante par rapport aux autres réponses ici est le besoin de modulesfonctionnéespour les demandes WebDAV= "true "

7
répondu John Blenheim 2016-06-17 03:10:04

URLScan tool users""

si d'autres réponses ne fonctionnent toujours pas et que vous obtenez erreur 404 : ces verbes peuvent être explicitement rejetés par L'outil URLScan , si vous l'avez installé.

vous pouvez configurer les sections [AllowVerbs] et [DenyVerbs] du fichier URLScan.ini pour répondre à vos besoins.

méfiez-vous des risques de sécurité d'activer ces verbes.

6
répondu Alph.Dev 2017-04-13 12:13:48

ce qui a fonctionné pour moi était de désinstaller complètement WebDav.

5
répondu leojh 2014-04-11 17:19:30

entrer dans le handler mappings et Configurer WebDAV pour gérer tous les verbes est la seule chose qui a fonctionné pour moi, malgré le fait que PUT et DELETE étaient déjà répertoriés comme verbes manipulés. Le travail web.config I have est:

  <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>
4
répondu Richard Collette 2014-07-16 21:27:37

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

vous pouvez également utiliser L'interface de gestion de IIS et définir cela globalement, ou serveur web par défaut

3
répondu Sergio 2012-10-11 19:11:42

j'ai essayé dans IIS 8.

  • **désinstaller WebDav Publishing

    étapes pour désinstaller - >Panneau de configuration - > aller aux programmes et fonctions - > tourner les fenêtres features on or off - > Select Internet Information Services->World Wide Services Web - > fonctionnalités HTTP communes- > "Remove" WebDAV Publishing by unchecking option WebDAV**

3
répondu bgS 2014-07-09 06:08:56

raison de l'erreur 500 !

Salut tout le monde,

je veux publier ma propre recherche aussi, j'espère qu'elle aiderait les futurs enthousiastes. Comme suggéré dans les réponses, Je ne peux pas désinstaller WebDav si j'ai ajouté la ligne ci-dessous dans web config (à partir d'autres réponses)

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

mais j'ai eu une erreur 500, quand j'ai activé le mode de débogage trouvé ce

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

réponse

Its parce qu'il y avait déjà un ExtensionlessUrlHandler dans la section handler mappings, faire ce qui suit pour résoudre le problème.

Méthode 1

1) Allez à votre Gestionnaire IIS et sélectionnez votre application

2) Aller à la rubrique handler Mappings

3) Trouver ExtensionlessUrlHandler-Integrated-4.0 et supprimer.

4) Ajouter ExtensionlessUrlHandler dans votre webconfig (comme mentionné dans les réponses ci-dessus)

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

Méthode 2

1) Supprimer ExtensionlessUrl handler de votre Web config

2) Cliquez sur votre application dans IIS Server, allez à HandlerMappings

3) Trouver ExtensionlessUrlHandler-Integrated-4.0 (seulement ce nom, ignorer les autres)

4) clic droit sur il et choisir éditer

modifier gestionnaire

5) Cliquez sur "Request Restrictions" et sélectionnez l'onglet verbes et choisissez Tous les verbes

cela permettra à extensionsless handler d'autoriser tous les verbes.

je vais suivre la méthode 1, Comme nous pouvons avoir le contrôle dans le web.config. Mais assurez-vous de vérifiez le serveur de déploiement pour dupliquer gestionnaire de définitions.

2
répondu Ganesh Vellanki 2017-09-16 19:53:24

ma toile.config avec asp.net noyau 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
répondu Heli Perez 2017-10-21 19:50:06

in windows server 2012 . Ouvrir applicationHost.config fichier dans notepad avec droits D'administrateur

applicationHost.le fichier de configuration se trouve dans C:\Windows\System32\inetsrv\config

localiser le secteur

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

avis supprimer et mettre les verbes HTTP sont définis à false. Changer pour vrai.

Lire maintenant comme suit

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

Enregistrer le fichier. Vous avez activé les requêtes HttpPut et HttpDelete sur votre serveur web

1
répondu rhalf 2018-09-12 15:31:15