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" />
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 ----------------------------------------------|
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.
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"
.
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. ;- )
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 "
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.
ce qui a fonctionné pour moi était de désinstaller complètement WebDav.
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>
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
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**
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
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.
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>
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