41 votos

Asp.NET Web API - 405 - El verbo HTTP utilizado para acceder a esta página no está permitido - cómo establecer mapeos de manejadores

He escrito un servicio REST utilizando la API web de ASP.NET. Estoy tratando de enviar la solicitud HttpDelete, sin embargo, me da el siguiente error:

405 - El verbo HTTP utilizado para acceder a esta página no está permitido

Creo que estoy cerca de la solución, he descubierto que debo habilitar la gestión remota de IIS, ir a la sección Handler Mappings y añadir el verbo DELETE en la posición adecuada... pero el problema es que hay un montón de posiciones diferentes en la lista... (algo como esto: http://www.somacon.com/p126.PHP ).

¿Cuál debo editar? Algunos de ellos no tienen extensión, por ejemplo "ExtensionUrlHandler-Integrated-4.0" y le he añadido el verbo DELETE, pero sigue sin funcionar...

Fue sólo un tiro en la oscuridad para modificar que uno, por lo que debe modificar la posición diferente? Si es así, ¿cuál? ¿O hay algo más que deba hacer?

El mismo servicio web funciona perfectamente en mi servicio local, así que supongo que el problema está en el IIS remoto...

Saludos

154voto

giacomelli Puntos 1666

No necesitas desinstalar WebDAV, simplemente añade estas líneas al web.config:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

11voto

Darin Dimitrov Puntos 528142

La causa más común de este error es WebDAV . Asegúrate de desinstalarlo.

7voto

Santosh Sah Puntos 259

Cambie su archivo Web.Config como se indica a continuación. Actuará como un encanto.

En el nodo <system.webServer> añadir la siguiente parte de código

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

Después de añadirlo, su Web.Config tendrá el siguiente aspecto

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

3voto

Nick Josevski Puntos 1997

No es común pero puede ayudar a algunos.

asegúrese de que está utilizando [HttpPut] de System.Web.Http

Estábamos recibiendo un 'Método no permitido' 405, en un método decorado HttpPut.

Nuestro problema parece ser poco común, ya que accidentalmente utilizamos el [HttpPut] de System.Web.Mvc y no de System.Web.Http

La razón es que resharper sugirió la versión .Mvc, mientras que normalmente System.Web.Http ya está referenciado cuando se deriva directamente de ApiController estábamos usando una clase que extendía ApiController.

3voto

Hithesh Puntos 23

Cambie su archivo Web.Config como se indica a continuación

 <system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X