it-swarm.com.de

CORS-Unterstützung für PUT und DELETE mit ASP.NET-Web-API

Ich arbeite mit der endgültigen Version der ASP.NET-Web-API, um eine JavaScript-freundliche API zu implementieren. In verschiedenen Tutorials habe ich CORS in meiner web.config aktiviert:

<system.webServer>
 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
 </httpProtocol>
</system.webServer>

Mit den oben genannten Anforderungen funktionieren domänenübergreifende GET- und POST - Anforderungen, aber PUT- und DELETE-Anforderungen schlagen fehl. 

In Chrome:

Die Methode PUT ist für Access-Control-Allow-Methoden nicht zulässig. 

Die Methode DELETE ist für Access-Control-Allow-Methoden nicht zulässig.

Gibt es etwas zusätzliches, damit PUT- und DELETE-Verben domänenübergreifend arbeiten können?

35
Nathan Taylor

Es sieht so aus, als würde das Hinzufügen eines anderen benutzerdefinierten Headers das Problem lösen:

<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

Stellen Sie außerdem sicher, dass Sie neben der Antwort von Nathan das Modul WebDAV IIS deaktiviert und die Einstellung runAllManagedModulesForAllRequests="true" in der Datei web.config festgelegt haben:

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

Andernfalls funktionieren Preflight-CORS-Requests (die für PUT-, DELETE-Methoden und zusätzliche OPTIONS-Requests verwendet werden) nicht.

25
whyleee

Sehr einfache Lösung zur Lösung des CORS-Problems in WEBAPI2.2.

Fügen Sie Folgendes in Ihre WebApi-Konfigurationsdatei ein.

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

Bevor Sie dies hinzufügen, müssen Sie den benutzerdefinierten Header in der Datei Web.config entfernen.

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

Wenn Sie sowohl customheader als auch den in WebApiconfig aktivierten CORS haben, wird der cors-Fehler auftreten.

Fügen Sie die in der WebApi-Konfiguration aktivierten Kors hinzu, um das Problem zu lösen.

9

Versuchen Sie, die Zeile zu kommentieren: <remove name="OPTIONSVerbHandler" /> im <handlers>-Tag

0
Ibere Spadoto

Bitte verwenden Sie diese Option in web.config, während Sie Ihre Anwendung bereitstellen, nicht in der lokalen 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