ASP.NET Web API - Verbos PUT & DELETE no permitidos - IIS 8

Recientemente actualicé de Visual Studio 2010 a Visual Studio 2012 RC. El instalador también instala IIS 8 Express, que ahora Visual Studio usa como servidor web predeterminado.

IIS 8 está bloqueando mis solicitudes de API WEB que usan verbos PUT AND DELETE. IIS devuelve un error 405, The requested resource does not support http method 'PUT'.

Sé que la gente ha tenido problemas con esto en el pasado y hay varios mensajes al respecto en Stack Overflow. Con IIS 7 Express, la solución fue desinstalar WebDav. Desafortunadamente, no veo ninguna forma de hacerlo con IIS 8.

Intenté editar las secciones WebDav de applicationhost.config pero eso no ayudó. Por ejemplo, eliminé <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> desde el archivo de configuración.

He pasado demasiado tiempo en esto. ¿Debe haber una manera simple de habilitar PUT y DELETE?

preguntado el 06 de junio de 12 a las 00:06

Esto todavía está roto en la versión RTM. Acabo de perder 3 horas en esto... Todo lo que se necesitaba era agregar los verbos adicionales a ExtensionlessUrl-Integrated-4.0. -

No creo que esto esté roto, pero es por diseño. Creo que cambiar el comportamiento predeterminado interferiría con WebDAV y rompería la compatibilidad con versiones anteriores. Esto tampoco funcionó con IIS7 cuando se instaló WebDAV. -

También perdí 3 horas en esto... 6 años después de esta publicación. -

21 Respuestas

Bueno. Finalmente llegué al fondo de esto. Debe superar algunos obstáculos para que los verbos PUT y DELETE funcionen correctamente con IIS8. De hecho, si instala la versión candidata de VS 2012 y crea un nuevo proyecto de API WEB, encontrará que los métodos PUT y DELETE de muestra devuelven errores 404 listos para usar.

Para usar los verbos PUT y DELETE con la API web, debe editar %userprofile%\documents\iisexpress\config\applicationhost.config y agregar los verbos al controlador ExtensionlessUrl de la siguiente manera:

Cambia esta línea:

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

a:

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

Además de lo anterior, debe asegurarse de que WebDAV no interfiera con sus solicitudes. Esto se puede hacer comentando las siguientes líneas 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" />

También tenga en cuenta que la convención de API web predeterminada es que el nombre de su método debe ser el mismo que el verbo HTTP invocado. Por ejemplo, si está enviando una solicitud de eliminación HTTP, su método, de forma predeterminada, debe llamarse Eliminar.

Respondido el 19 de junio de 12 a las 07:06

Para problemas similares con el verbo OPTIONS en IIS8 (donde algo más está interceptando antes que sus controladores) intente en su web.config. De hecho, recomendaría usar la técnica "eliminar" en su web.config local en lugar de jugar con applicationhost.config cuando sea posible como regla general: Jason

En lugar de eliminar WebDAV a nivel de servidor, lo que puede tener efectos colaterales, es mejor eliminarlo de su proyecto como se muestra aquí: stackoverflow.com/a/14465655/428280 - Retorcido

¿Y entonces que? Puede ser incluso que funcione localmente pero no funcionará en Azure: Caja de Herramientas

Una respuesta que indique modificar la configuración del sistema, incluso en máquinas de desarrollo, no puede ser una respuesta. Esto resuelve un síntoma y realmente no ayuda en los equipos ni en la producción. ¿Va a replicar esto en cada máquina? Echa un vistazo a la respuesta de Santosh Sah. - André Werlang

Además, también necesitaba quitar el WebDAVModule de la sección de módulos, según La respuesta de Santosh Sah. - Ivailo Slavov

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

En 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á a continuación

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

respondido 01 nov., 13:08

Eliminar WebDavModule es la forma correcta de solucionar este problema. - señoritaRaphie

salvó mi día: - Pedro Stegnar

Los encabezados personalizados no deberían ser necesarios ya que están relacionados con CORS y de esta manera está induciendo a un agujero de seguridad. Solo la parte relativa a WebDAVModule es relevante. - André Werlang

Me hace morir un poco por dentro cada vez que veo esto - runAllManagedModulesForAllRequests="true" - como solución desarrolladorbritánico.co.uk/2010/06/… - Oliver

PRECAUCIÓN : La sección de encabezados personalizados en el código anterior permite CUALQUIER sitio para llamar a su API desde un navegador, que es un gran riesgo de seguridad. Lea sobre CORS, que es efectivamente lo que esos encabezados están habilitando. - profemamba

Eliminar el WebDAV funciona perfectamente para mi caso:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.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>

siempre es mejor resolver el problema a través de web.config en lugar de solucionarlo a través de iis o machine.config para conceder que no sucedería si la aplicación estuviera alojada en otra máquina

Respondido 14 ago 17, 03:08

Esto funcionó para mí, donde los demás no lo hicieron por alguna razón (estaba en IIS 8.5) gracias - John

Eliminar WebDAVModule funcionó para mí, no es necesario eliminar el controlador WebDAV (IIS 8.0). - PedroS

simplemente eliminando webdav funciona en framework 4.6.2 iis8.5 - Abdul Rehman Sayed

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

Elimina la necesidad de modificar las configuraciones de su host.

respondido 09 mar '16, 19:03

Ya estaba escrito otra línea pero no estaba funcionando. después de agregar líneas y está trabajando ahora. Muchas gracias y 1 voto de mi parte. - Banketeshvar Narayan

Esto funciona, pero puede fallar debido al bloqueo de configuración que impide el uso de en web.config. En este caso, debe deshabilitar el bloqueo de configuración en applicationHost.config. Si no tiene control sobre applicationHost.config por algún motivo, no se puede usar este enfoque. - Florian Invierno

Trabajé con IIS10, aunque solo usé "*" como verbo - javier g

Trabajó con IIS 10 y Web API 2. Funcionó, debo agregar, después de que otra docena de "soluciones" que encontré en línea no funcionaron. ¡Gracias! - mateo oeste

Puede ser obvio para algunos, pero no lo fue para mí: asegúrese de estar usando el integrated tubería y no classic, o esto no ayudará. - Scott Baker

En la API web de Asp.Net - webconfig. Esto funciona en todos los navegadores.

Agregue el siguiente código dentro de la etiqueta System.web

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

Reemplace su etiqueta system.webserver con este código a continuación

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <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>

respondido 19 nov., 14:09

Tuve este problema en IIS 7.5 y esta solución funcionó perfectamente. En lugar de eliminar todo el contenido de mi system.webserver, simplemente fusioné las configuraciones relevantes anteriores en mi propia configuración. - keith walton

PRECAUCIÓN : La sección de encabezados personalizados en el código anterior permite CUALQUIER sitio para llamar a su API desde un navegador, que es un gran riesgo de seguridad. Lea sobre CORS, que es efectivamente lo que esos encabezados están habilitando. - profemamba

También tuve este problema en iis 7.5 y funcionó. Asegúrese de leer el mensaje anterior de Toolkit sobre el riesgo que implica abrir cors a todos. También vote a favor de su comentario porque cositas como esa son muy valiosas. - sjdirecto

No creo que necesite encabezados personalizados en absoluto en este caso. El resto de system.webserver debería ser suficiente, solo asegúrese de tener la nombre correcto para el controlador de URL sin extensión. - Ivailo Slavov

@niico Debe permitir que solo los sitios de confianza tengan Acceso-Control-Permitir-Origin, es decir, reemplace "*" con la URL de su(s) sitio(s) web. Esta propiedad es una lista blanca de todos los sitios confiables, a menos que desee confiar en toda la web (lo que suele ser una mala idea). - profemamba

esto funcionó para mí en iis8 junto con algunas de las otras respuestas. Mi error fue un 404.6 concretamente

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

Respondido el 25 de enero de 15 a las 01:01

cuando ejecuta AppCmd, esto es lo que pone en su web.Config (excepto el bit applyToWebDAV). - chase florell

Solo una actualización rápida para cualquier otra persona que pueda tener este problema. A partir de hoy, cambiar %userprofile%\documents\iisexpress\config\applicationhost.config ya NO funciona (esto funcionaba bien hasta ahora, no estoy seguro si esto se debe a una actualización de Windows). Después de horas de frustración, cambié web.config para agregar estos controladores a system.webserver para que funcione:

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

Respondido el 05 de enero de 16 a las 23:01

Habilitar CORS (agradable y ordenado)

1. Agregue el paquete nuget CORS

Install-Package microsoft.aspnet.webapi.cors

2. En el archivo WebApiConfig.cs para registrar el método, agregue el siguiente código:

config.EnableCors();

ex:
usando System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3. Agregue el siguiente código en el espacio de nombres del controlador, que incluye obtener, publicar, eliminar, poner o cualquier método http

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

ex:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

referencia:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Respondido el 31 de enero de 16 a las 18:01

Para PHP, era simplemente:

  1. Abrir IIS
  2. Ir a asignaciones de controladores
  3. haga clic en editar en php5.6.x o php7.0.x
  4. haga clic en "solicitar restricciones"
  5. en la pestaña de verbos, seleccione "uno de los siguientes verbos" y agregue "GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS"

Me imagino que esto también funcionará con otros controladores.

contestado el 23 de mayo de 16 a las 07:05

Después de que nada funcionó, pude resolver esto siguiendo los pasos a continuación:

• No seleccionó la configuración de IIS 'WEB DAV PUBLISHING' durante la instalación de IIS. • INETMGR - Sitio web predeterminado - Filtrado de solicitudes - Verbos HTTP - PUT como verdadero

Respondido el 15 de junio de 16 a las 11:06

Después de una búsqueda interminable y probando las respuestas ya proporcionadas (agregando los verbos PUT, DELETE y eliminando WEBdav), simplemente no funcionó.

Fui a la configuración de registro de IIS: > Ver archivos de registro. En mi caso, W3SVC4 era la carpeta con la última fecha, abrí la carpeta, busqué el último archivo de registro y vi esta entrada: GET /Rejected-By-UrlScan ~/MYDOMAIN/API/ApiName/UpdateMETHOD

El método de actualización se enumeró con el verbo GET, extraño, ¿verdad? Así que busqué en Google Rejected-By-UrlScan y encontré este enlace: UrlScan rompió mi blog.

Fui a aquí: %windir%\system32\inetsrv\urlscan\UrlScan.ini

Básicamente, UrlScan bloqueó los verbos PUT y DELETE. Abrí este archivo INI, agregué PUT y DELETE a AllowVerbs y los eliminé de las listas de DenyVerbs. ¡Guardé el archivo INI y funcionó! Entonces, para mí, estos pasos fueron necesarios junto con las sugerencias de ExtensionlessUrlHandler.

Servidor web Windows 2008 R2 (64 bits), IIS 7.5. Estoy usando esto en combinación con DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Mi método de actualización:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)

Respondido 30 Abr '15, 23:04

He enfrentado el mismo problema con usted, luego lo resolví. Aquí hay soluciones, deseo que tal vez pueda ayudar.
Nombre

en el IIS modules Configuración, haga un bucle en el WebDAVMódulo, si su servidor web lo tiene, elimínelo

Segundo

en el IIS handler mappings configuración, puede ver la lista de habilitación del controlador, para elegir the PHP item, edítelo, en la página de edición, haga clic en el botón Solicitar restricciones, luego seleccione the verbs tab en el modal, en la etiqueta especificar los verbos que se manejarán, marque el all verbs radio, luego haga clic en Aceptar, también puede ver una advertencia, nos muestra que usa comillas dobles para la ejecución de PHP-CGI, luego hágalo

si lo hizo, reinicie el servidor IIS, estará bien

enter image description here

Respondido 03 Jul 18, 13:07

Solo eliminé WebDAVModule del sitio web de IIS y funcionó para mí: Umair Malhi

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

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

Si acierta con errores 405 repetidos, es mejor restablecer la firma del método a los valores predeterminados como se indicó anteriormente e intentarlo.

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

Puede cambiar el tipo de datos del id sin embargo.

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 y no el método de datos que transportará la carga útil como contenido del cuerpo.

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

Ejemplo:

DELETE http://localhost/item/1

Espero eso ayude.

respondido 16 nov., 15:12

Así es como permite verbos HTTP adicionales mediante la GUI del Administrador de IIS.

  1. En el Administrador de IIS, seleccione el sitio para el que desea permitir PONER o ELIMINAR.

  2. Haga clic en la opción "Solicitar filtrado". Haz clic en la pestaña "Verbos HTTP".

  3. Haga clic en el enlace "Permitir verbo..." en la barra lateral.

  4. En el cuadro que aparece, escriba "ELIMINAR", haga clic en Aceptar.

  5. Vuelva a hacer clic en el enlace "Permitir verbo..." en la barra lateral.

  6. En el cuadro que aparece, escriba "PUT", haga clic en Aceptar.

Respondido el 30 de enero de 17 a las 18:01

buen intento, algo diferente por una vez, ¡pero aún así no funcionó! - Andrés

Probé todo lo demás que he visto sugerido en SO y en otros lugares. Finalmente probé esto y funcionó perfectamente. En mi caso, los verbos PONER y ELIMINAR ya estaban en la lista, y primero tuve que eliminarlos, luego volver a agregarlos usando el enlace Permitir verbo..., pero aun así, funcionó cuando nada más lo había hecho. ¡Muchas gracias! - JTennessen

Estoy usando un archivo ashx en una aplicación MVC y ninguna de las respuestas anteriores funcionó para mí. IIS 10.

Esto es lo que funcionó. en vez de cambiar"ExtensionlessUrl-Integrated-4.0"en IIS o web.config cambié"SimpleHandlerFactory-Integrated-4.0" para "*.ashx"archivos:

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

Respondido el 10 de enero de 19 a las 15:01

No estoy seguro de si ha editado el archivo de configuración correcto. Intenta seguir los pasos

  1. abra %userprofile%\ducuments\iisexpress\config\applicationhost.config

  2. De forma predeterminada, las entradas proporcionadas a continuación se comentan en el archivo applicationhost.config. descomentar estas entradas.

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

Respondido 09 Feb 13, 03:02

jugando con applicationhost.config? no - Caja de Herramientas

Uno no debe meterse con otro que no sea el archivo de configuración de la aplicación. Primero, hará esto para todo el servidor y olvidará, luego muchas personas se preguntarán cómo funciona en esta máquina y no funciona en el resto. Además, si no se le permite el acceso al archivo de configuración de IIS en el servidor donde está alojada la aplicación, tendrá que solucionarlo en web.config. Imagine que su servidor de desarrollo tiene la actualización anterior, ¿será preciso su web.config? Es una excelente manera de perder el día de alguien investigando por qué ha fallado la implementación de producción: Ivailo Slavov

La otra razón puede ser la siguiente:
Cambié mi Url para el método Web Api de acuerdo con esta respuesta:

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Pero este método crea un enlace como:

/api/MyApiCtrl?action=MyAction

Esto funciona correctamente con solicitudes GET y POST, pero no con PUT o DELETE.
Así que simplemente lo reemplacé con:

/api/MyApiCtrl

y solucionó el problema.

contestado el 23 de mayo de 17 a las 12:05

En IIS 8.5/Windows 2012R2, Nada de lo mencionado aquí funcionó para mí. No sé qué significa Eliminar WebDAV, pero eso no resolvió el problema para mí.

Lo que me ayudó son los siguientes pasos;

  1. Fui al administrador de IIS.
  2. En el panel izquierdo seleccionó el sitio.
  3. En el área de trabajo izquierda, seleccionó el WebDAV, lo abrió haciendo doble clic.
  4. En el panel más a la derecha, deshabilítelo.

Ahora todo está funcionando.

Respondido el 08 de junio de 17 a las 07:06

yo añadí requireAccess="None" a web.config como este

    <configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
                <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
                <remove name="WebDAV" />
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="None"/>
                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,DELETE,COPY,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
                <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,DELTE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
      </handlers>
      <aspNetCore processPath=".\Informing.Gateway.Api.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>

Y funcionó. Eso es

Respondido 28 ago 21, 09:08

Probar un error no es la forma correcta de solucionar este problema. Lo que hay que hacer es:

  • Para identificar la fuente que bloquea sus solicitudes PUT/DELETE
  • luego puedes eliminarlo, deshabilitarlo o incluso mejor configurarlo:

1- Para conocer la fuente, debe configurar el Rastreo de solicitudes fallidas en IIS. enter image description here 2- Tienes "Agregar" que Errores registrar enter image description here enter image description here Asegúrese de utilizar una vida útil corta para esta entrada de seguimiento para evitar sobrecargar su sistema con archivos de registro. IIS generará un archivo xml separado para cada llamada. 3- Realice la solicitud errónea utilizando Postman o Swagger para generar una entrada de error de seguimiento. 4- Desde la pantalla anterior, puede seleccionar "Ver registros de seguimiento" para acceder a los archivos de registro generados. 5- Abra el archivo de registro erróneo usando Internet Explorer. Y acepta cualquier mensaje. enter image description here 6- Fíjate en la fuente que bloquea tu solicitud. enter image description here 7- desactívelo en Módulos o Controlador de asignación desde la interfaz de IIS o en su web.config como lo demuestran otros carteles.

Respondido el 30 de diciembre de 21 a las 10:12

Puede convertir su método Eliminar como POST como;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }

Respondido el 16 de Septiembre de 15 a las 19:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.