¡Agradezco cualquier ayuda en esto ya que se supone que el sitio estará disponible esta noche!
Tengo un controlador de API web con un método Delete. El método se ejecuta bien en mi máquina local que ejecuta IIS Express (Windows 8) pero tan pronto como lo implementé en el servidor IIS en vivo (Windows Server 2008 R2) dejó de funcionar y muestra el siguiente mensaje de error:
Error HTTP 405.0 - Método no permitido La página que está buscando no se puede mostrar porque se está utilizando un método no válido (verbo HTTP)
He buscado soluciones en la web e implementé las más razonables. Mi configuración web tiene las siguientes configuraciones:
<system.webServer>
<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,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
También intenté cambiar las asignaciones de controladores y el filtrado de solicitudes en IIS sin éxito. Tenga en cuenta que las reglas de creación de WebDAV en IIS parecen estar deshabilitadas.
Cualquier idea será muy apreciada Gracias.
En algunos casos, eliminarlo solo de los módulos puede producir el siguiente error:
Se sugirió una solución aquí . También es necesario quitarlo de los manipuladores.
fuente
En mi caso, ninguna de las soluciones anteriores funcionó. Esto se debió a que había cambiado el nombre del parámetro en mi
Delete
método.yo tenía
en vez de
Necesito usar el
id
nombre porque ese es el nombre que se declara en miWebApiConfig
archivo. Tengaid
en cuenta el nombre en la tercera y cuarta líneas:Obtuve esta solución de aquí .
fuente
El
DELETE
verbo Javascript para HTTP debe ser así:No , no usar algo como esto:
como cuando usas el
POST
método.fuente
Después de probar casi todas las soluciones aquí, esto funcionó para mí. Agregue esto en su archivo de configuración de API
fuente
Si está utilizando IIS 7.0 o una versión posterior. Este problema está relacionado principalmente con el módulo de extensión WebDAV en el servidor IIS. esto sucedió mientras se usaba la acción Publicar o eliminar.
Pruebe la siguiente configuración en la configuración web
fuente
También tuve el mismo problema, estoy llamando a WebAPi y aparece este error. Agregar la siguiente configuración en web.config para servicios resolvió mi problema
en el archivo web.config resolvió mi problema. Así es como estaba llamando desde el lado del cliente
fuente
Vaya al archivo applicationHost.config (generalmente en C: \ Windows \ System32 \ inetsrv \ config) y comente la siguiente línea en applicationHost.config
1) Debajo de <handlers>:
2) También comente el siguiente módulo al que hace referencia el controlador anterior en <modules>
fuente
En mi caso, omití agregar
{id}
al[Route("")]
y obtuve el mismo error. Agregar eso solucionó el problema para mí:[Route("{id}")]
fuente
Tuve el error 405 Método no permitido porque había omitido hacer público el método Delete en el controlador WebApi.
Me tomó mucho tiempo encontrar esto (¡demasiado tiempo!) Porque habría esperado un error No encontrado en este caso, por lo que asumí incorrectamente que mi método Eliminar estaba siendo denegado.
El motivo de No permitido en lugar de No encontrado es que también tenía un método Get para la misma ruta (que será el caso normal al implementar REST). La función pública Get coincide con el enrutamiento y luego se niega debido al método http incorrecto.
Un simple error que conozco, pero puede ahorrarle tiempo a alguien más.
fuente
Solo para agregar. Si esta es tu configuración
siga haciendo lo que dijo Hugo, y no configure el atributo de ruta en el método de obtención del controlador, esto dio un problema en mi caso.
fuente
Tuve un problema similar pero para PUT: ninguna de las otras sugerencias funcionó para mí.
Sin embargo, estaba usando en
int
lugar del predeterminadostring
para la identificación. agregar{id:int}
a la ruta resolvió mi problema.fuente
Tuvimos que agregar encabezados personalizados a nuestro web.config ya que nuestra solicitud tenía varios encabezados que confundían la respuesta de la API.
fuente
El atributo [HttpPost] en la parte superior del método Delete resolvió este problema para mí:
fuente
data
(es decir, el cuerpo de la solicitud) en lugar deparams
(es decir, la URL de la solicitud) en el lado del cliente.