web-dev-qa-db-fra.com

Prise en charge par CORS de PUT et DELETE avec l’API Web ASP.NET

Je travaille avec la version finale de l’API Web ASP.NET pour mettre en œuvre une API compatible avec JavaScript. Dans divers tutoriels, j'ai activé CORS dans mon 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>

Avec ce qui précède, les requêtes inter-domaines GET et POST fonctionnent correctement, mais les deux requêtes PUT et DELETE échouent. 

En Chrome:

La méthode PUT n'est pas autorisée par Access-Control-Allow-Methods. 

La méthode DELETE n'est pas autorisée par Access-Control-Allow-Methods.

Y at-il quelque chose de plus nécessaire pour que les verbes PUT et DELETE fonctionnent entre domaines?

35
Nathan Taylor

Il semble que l'ajout d'un autre en-tête personnalisé l'a réglé:

<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>
47
Nathan Taylor

De plus, en plus de Nathan answer, assurez-vous de désactiver le module WebDAV IIS et de définir le paramètre runAllManagedModulesForAllRequests="true" dans le fichier web.config:

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

Sans cela, les requêtes preflight CORS (qui sont utilisées pour les méthodes PUT, DELETE et envoyer une demande OPTIONS supplémentaire) ne fonctionneront pas.

25
whyleee

Solution très simple pour surmonter le problème CORS dans WEBAPI2.2.

Ajoutez ce qui suit dans votre fichier de configuration WebApi.

var cors = new EnableCorsAttribute("*", "*", "*");
Config.EnableCors(cors);

Avant d'ajouter ceci, assurez-vous de supprimer l'en-tête personnalisé dans le fichier 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 vous avez également le CORS activé dans WebApiconfig, vous ferez face à l'erreur cors.

Ajouter les cors activés dans WebApi config va résoudre le problème.

9

Essayez de commenter la ligne: <remove name="OPTIONSVerbHandler" /> in <handlers> tag

0
Ibere Spadoto

Veuillez utiliser ceci dans web.config lorsque vous avez déployé votre application, ne l'utilisez pas dans local web.config

    <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>
0
Debendra Dash