origin - Soporte CORS para PUT y DELETE con ASP.NET Web API
enable cors in web api asp net (4)
Estoy trabajando con la versión final de ASP.NET Web API para implementar una API compatible con JavaScript. Por varios tutoriales, he habilitado CORS en mi web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>
Con lo anterior, las solicitudes GET y POST entre dominios funcionan bien, pero las solicitudes PUT y DELETE fallan.
En Chrome:
El método PUT no está permitido por Access-Control-Allow-Methods.
El método DELETE no está permitido por Access-Control-Allow-Methods.
¿Se requiere algo adicional para que los verbos PUT y DELETE funcionen entre dominios?
Además, además de la respuesta de Nathan, asegúrese de deshabilitar el módulo IIS de WebDAV y establecer la configuración runAllManagedModulesForAllRequests="true"
en el archivo web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
Sin esto, las solicitudes CORS de verificación previa (que se utilizan para los métodos PUT, DELETE y para enviar solicitudes OPTIONS adicionales) no funcionarán.
Parece que agregar otro encabezado personalizado lo resolvió:
<system.webServer>
<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>
</system.webServer>
Solución muy simple para superar CORS Issue en WEBAPI2.2.
Agregue lo siguiente en su archivo de configuración de WebApi.
var cors = new EnableCorsAttribute("*", "*", "*");
Config.EnableCors(cors);
Antes de agregar esto, asegúrese de quitar el encabezado personalizado en el archivo Web.config.
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, X-Token" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
Si tiene tanto el encabezado personalizado como el CORS habilitado en WebApiconfig, se encontrará con el error cors.
Agregar los cors habilitados en la configuración de WebApi resolverá el problema.
Utilice esto en web.config mientras implementó su aplicación, no la use en la web.config local
<system.webServer>
<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>
<ModSecurity enabled="false" configFile="C:/inetpub/wwwroot/owasp_crs/modsecurity.conf" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<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>