una servidor respuesta remoto not method inesperada estado error devolvió code allowed asp.net asp.net-mvc iis iis-7 asp.net-web-api

asp.net - servidor - method not allowed post



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

Escribí el servicio REST usando ASP.NET Web API. Estoy tratando de enviar la solicitud HttpDelete, sin embargo, recibo 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, descubrí que debería habilitar la administración remota de IIS, ir a la sección Asignaciones de manejadores y agregar el verbo DELETE a la posición adecuada ... pero el problema es que hay muchas posiciones diferentes en la lista ... (algo así como: http://www.somacon.com/p126.php ).

¿Cuál debería editar? Pocos de ellos no tienen extensión, por ejemplo, "ExtensionUrlHandler-Integrated-4.0" y le agregué el verbo DELETE, pero todavía no funciona ...

Fue solo un tiro en la oscuridad modificarlo, entonces ¿debería modificar una posición diferente? ¿Si es así, Cuál? O tal vez, ¿hay algo más que debería hacer?

El mismo servicio web funciona perfectamente bien en mi servicio local, así que supongo que el problema es con el IIS remoto ...

Saludos


Además de todas las soluciones anteriores, compruebe si tiene el " id " o cualquier parámetro definido personalizado en el método DELETE que coincida con la configuración de la ruta.

public void Delete(int id) { //some code here }

Si tocas con 405 errores repetidos, mejor reinicia la firma del método a los valores predeterminados como se indica arriba y prueba.

La configuración de ruta por defecto buscará la id en la URL. Entonces, el id nombre del parámetro es importante aquí a menos que cambie la configuración de la ruta en la carpeta App_Start .

Sin embargo, puede cambiar el tipo de datos de la id .

Por ejemplo, el siguiente método debería funcionar bien:

public void Delete(string id) { //some code here }

Nota: También asegúrese de pasar los datos a través de la url, no el método de datos que llevará la carga útil como contenido corporal.

DELETE http://{url}/{action}/{id}

Ejemplo:

DELETE http://localhost/item/1

Espero eso ayude.


Cambie su archivo Web.Config como se muestra 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>


Cambie su archivo Web.Config como se muestra a continuación. Actuará como el encanto.

En el nodo <system.webServer> agregue la parte inferior del código

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

Después de agregar, su Web.Config se verá más abajo

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


En nuestro caso, el problema fue con el inicio de sesión federado entre un sitio .Net y ADFS. Al redireccionar al punto final de ADFS, el parámetro wctx necesitaba los tres parámetros para el método WSFederationAuthenticationModule.CreateSignInRequest : rm , id y ru

¡Gracias a Guillaume Raymond por el consejo para verificar los parámetros de URL!


Este error proviene del manejador de archivos estáticos, que por defecto no filtra ningún verbo, pero probablemente solo puede tratar con HEAD y GET.

Y esto es porque ningún otro controlador se acercó al plato y dijo que podían manejar DELETE.

Dado que está utilizando la WEBAPI, que debido al enrutamiento no tiene archivos y, por lo tanto, extensiones, las siguientes adiciones deben agregarse a su archivo web.config:

<system.webserver> <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="C:/windows/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="C:/windows/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" />

Obviamente, lo que se necesita depende del modo clásico frente al modo integrado, y el modo clásico depende de la bitecidad. Además, el encabezado OPTIONS se ha agregado para el procesamiento CORS, pero si no lo hace CORS no lo necesita.

FYI, su web.config es la versión local de la aplicación (o el directorio de la aplicación) cuyo nivel superior es applicationHost.config.


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


No necesita desinstalar WebDAV, simplemente agregue estas líneas a web.config:

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


Poco común, pero puede ayudar a algunos.

asegúrese de estar usando [HttpPut] desde System.Web.Http

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

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

La razón es que, el adaptador sugirió la versión .Mvc, donde, como normalmente se hace referencia a System.Web.Http cuando deriva directamente de ApiController , estábamos utilizando una clase que extendía ApiController.


Si es IIS 8.0, compruebe si la Activación HTTP está habilitada. Administrador del servidor -> IIS -> Administrar (ver arriba a la derecha) -> Agregar funciones y funciones -> ... -> acceder a la configuración WCF y luego seleccionar Activación HTTP.


Si ninguna de las soluciones anteriores resolvió su problema como en mi caso (todavía atorado con mi módulo RestClient frente a 405) intente solicitar su Api con una herramienta como Fiddler. Quiero decir que el problema puede ser en otro lugar como una solicitud mal formateada.

Descubrí que mi módulo RestClient estaba pidiendo un ''Put'' con un parémetro Id mal formateado:

http://myserver/api/someresource?id=75fd954d-d984-4a31-82fc-8132e1644f78

en lugar de

http://myserver/api/someresource/75fd954d-d984-4a31-82fc-8132e1644f78

Incícilmente, la solicitud con formato incorrecto devuelve 405 - Método no permitido (IIS 7.5)


Tuve que pasar esto (el método 405 no está permitido) cuando el método de publicación de API que estaba llamando tenía tipos primitivos para los parámetros, en lugar de un tipo complejo al que se accedía desde el cuerpo. Al igual que:

Esto funcionó:

[Route("update"), Authorize, HttpPost] public int Update([FromBody] updateObject update)

Esto no:

[Route("update"), Authorize, HttpPost] public int Update(string whatever, int whatever, string whatever)