164 votes

ASP.NET l'API Web - METTRE ET de SUPPRIMER des Verbes Non Admis - IIS 8

J'ai récemment mis à niveau à partir de Visual Studio 2010 pour Visual Studio 2012 RC. Le programme d'installation installe également IIS 8 Express de Visual Studio utilise maintenant comme le serveur web par défaut.

IIS 8 bloque mon API WEB demandes qui utilisent PUT ET DELETE verbes. IIS renvoie une erreur 405, The requested resource does not support http method 'PUT'.

Je sais que les gens ont des problèmes avec cela dans le passé et il y a plusieurs messages à ce sujet sur un Débordement de Pile. Avec IIS 7 Express la solution est de désinstaller le protocole WebDav. Malheureusement, je ne vois pas de moyen de le faire avec IIS 8.

J'ai essayé de montage WebDav sections de applicationhost.config mais qui n'a pas aidé. Par exemple, je l'ai enlevé <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> partir du fichier de configuration.

J'ai passé beaucoup trop de temps sur ce. Il doit y avoir un moyen simple de permettre PUT et DELETE?

171voto

Mark S. Points 3627

Ok. J'arrivai enfin au bas de cette. Vous avez besoin de sauter à travers des cerceaux pour obtenir le PUT et DELETE verbes travailler correctement avec IIS8. En fait, si vous installez la version release candidate de VS 2012 et créez un nouveau projet d'API WEB, vous trouverez que l'échantillon les méthodes PUT et DELETE retour des erreurs 404 de la boîte.

Pour utiliser le PUT et DELETE verbes avec l'API Web, vous devez modifiez le fichier %userprofile%\documents\iisexpress\config\applicationhost.config et ajouter les verbes à l'ExtensionlessUrl gestionnaire comme suit:

Modifier cette ligne:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

pour:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

En plus de ce qui précède vous devez vous assurer WebDAV est de ne pas interférer avec vos demandes. Cela peut être fait en commentaires les lignes suivantes à partir de applicationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Également être conscients que la valeur par défaut de l'API Web de la convention, c'est que votre nom de la méthode doit être la même que la invoquée HTTP verbe. Par exemple, si vous envoyez un HTTP supprimer la demande de votre méthode, par défaut, devrait être nommé Supprimer.

140voto

Santosh Sah Points 259

Modifier Votre Site Web.Fichier de configuration comme ci-dessous. Il va agir comme un charme.

Dans le nœud <system.webServer> ajouter ci-dessous la partie du code

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

Après l'ajout de votre site Web.Config va ressembler à ci-dessous

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <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" />
    </handlers>
</system.webServer>

51voto

Chris Marisic Points 11495

Mise à jour de votre site web.config

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

Supprime la nécessité de modifier votre hôte configs.

18voto

Ganesh Points 99

Dans Asp.Net l'API Web - webconfig. Cela fonctionne dans tous les navigateurs.

Ajoutez le code suivant à l'intérieur du Système.balise web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Remplacez votre système.le serveur web de la balise avec ce code ci-dessous

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<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" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

-1voto

vikomall Points 9130

Je ne suis pas sûr si vous avez édité droit fichier de configuration. Essayez les étapes suivantes

  1. ouvrir le dossier %userprofile%\ducuments\iisexpress\config\applicationhost.config

  2. Par défaut soufflet donné les entrées sont commentées dans le applicationhost.fichier de configuration. décommenter ces entrées.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X