37

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 動詞をクロスドメインで機能させるために必要な追加機能はありますか?

4

5 に答える 5

53

別のカスタム ヘッダーを追加して整理したようです。

<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>
于 2012-09-20T22:11:33.143 に答える
32

また、ネイサンの回答に加えて、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 リクエストを送信する) は機能しません。

于 2012-12-21T00:06:10.653 に答える
9

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 で customheader と CORS の両方を有効にすると、cors エラーが発生します。

WebApi config で有効になっている cors を追加すると、問題が解決します。

于 2015-05-22T08:11:04.287 に答える
0

アプリケーションをデプロイする際に、これを 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>
于 2016-04-15T08:48:48.750 に答える