2016-09-23 8 views
0

CORSに新しいWebAPIプロジェクトを使用させようとしています。このプロジェクトは、ActiveDirectoryBearerAuthenticationを使用するデフォルトのWebAPIテンプレート(つまり、MVCおよびWebAPI参照)です。WebAPIでCORSを有効にする

私は試してみて、私のAPIへのリクエストを行うたびに、私は次のエラーで会っています:

XMLHttpRequest cannot load https://localhost:44385/api/values. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:44369' is therefore not allowed access.

私はMicrosoft.Owin.Cors、およびMicrosoft.AspNet.WebApi.Corsがインストールされています。

マイWebApiConfigはこれです:

public static void Register(HttpConfiguration config) 
{ 
    config.EnableCors(); 
    .... 

私Startup.Authはこれです:ネット周り

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCors(CorsOptions.AllowAll); 

    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    .... 

ソリューションは、追加すると言う:

<customHeaders> 
     <!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request--> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 

web.configファイルに。ただし、これを行うと、Microsoft.AspNet.WebApi.Corsがインストールされているかどうかにかかわらず、すべてが許可されます。あなたは次の操作を行うことができる唯一の単一ドメインできるようにするには

+0

すべてを許可していませんか、依然として制限されたアクセスを望み、他の要求をブロックしたい –

+0

CORSが動作するためには、IEがP3Pヘッダーの応答を要求することです。 – pm100

+0

1つのドメインを除くすべてをブロックしたいです。私はそれが働いていることを確認するために後方に働くと思った。もし私がこれをやっていなかったら、web.configの解決策が修正されたと思っていたでしょう - それはCORSの設定に関係なくすべてを許可しません。 – Mardoxx

答えて

0

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <clear /> 
    <add name="Access-Control-Allow-Origin" value="http://www.myalloweddomain.com" /> 
    </customHeaders> 
</httpProtocol> 
</system.webServer> 

をしかし、それは、単一のドメインに許可されています。追加ノードを追加しようとすると、サイトは読み込まれません。複数のドメインを許可する場合は、hereの解決策の1つを試す必要があります。チェックする

+0

私はちょうどこれを試して、それは動作します、ありがとう。しかし、CORSミドルウェアのポイントは何ですか? – Mardoxx

+0

あなたがコードで行ったことを意味すると思いますか?私の答えの最後に述べたように、web.configの設定は単一のドメインに対してのみ機能します。コードソリューションでは、複数ドメインのホワイトリスト作成が可能です。さらに、Web.configではなくコードでソリューションを持つ方が好きです。 – Necoras

0

もの:

  • Owinは、IIS(あなたがMicrosoft.Owin.Host.SystemWebを含めていることを確認してください)
  • IISリクエストIIS hijacks CORS Preflight OPTIONS request
  • をハイジャックしないことを確認の上で蹴ります特定のURLに直接OPTIONリクエストを発射するためにフィドラーを使用してください(サーバーによって返されたマスク500だけのマスクである場合もあります) - ブラウザはそれほどうまく処理できません
+0

私は見て、感謝します。そのSOの投稿への答えは、「最後の手段として...」と言います。それはすべてのホストを許可し、コード内の何かを上書きするだけです。 – Mardoxx

関連する問題