web-dev-qa-db-ja.com

ASP.NET Web APIを使用したPUTおよびDELETEのCORSサポート

ASP.NET Web APIの最終バージョンを使用して、JavaScriptに対応したAPIを実装しています。さまざまなチュートリアルに従って、web.configでCORSを有効にしました。

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

上記では、クロスドメインGETおよびPOSTリクエストは正常に機能しますが、PUTおよびDELETEリクエストは両方とも失敗します。

Chromeの場合:

メソッドPUTは、Access-Control-Allow-Methodsでは許可されていません。

メソッドDELETEは、Access-Control-Allow-Methodsでは許可されていません。

クロスドメインで機能するPUTおよびDELETE動詞を取得するために追加で必要なものはありますか?

35
Nathan Taylor

ソートされた別のカスタムヘッダーを追加するように見えます:

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

また、ネイサンの答えに加えて、WebDAV IISモジュールを無効にし、runAllManagedModulesForAllRequests="true" web.configの設定:

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

これがないと、 プリフライトCORSリクエスト (PUT、DELETEメソッドに使用され、追加のOPTIONSリクエストを送信します)は機能しません。

25
whyleee

WEBAPI2.2のCORS問題を克服するための非常にシンプルなソリューション。

WebApi構成ファイルに次を追加します。

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

これを追加する前に、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" />

WebApiconfigでカスタムヘッダーとCORSの両方を有効にしている場合、corsエラーが発生します。

WebApi構成で有効なcorsを追加すると、問題が解決します。

9

行をコメントしてみてください:<remove name="OPTIONSVerbHandler" /> in <handlers>タグ

0
Ibere Spadoto

アプリケーションのデプロイ中にweb.configで使用してください。ローカル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