複数のドメインでXmlHttpRequestを使用できるように、ASP.NET WebAPIでCORS(クロスオリジンリソースシェアリング)を処理するための最も洗練された方法(現在利用可能)を知りたいだけですか?これをすべてのタイプのリクエスト(GEt、POSTなど)のヘッダーにOPTIONSと統合するにはどうすればよいですか?
ありがとう!
複数のドメインでXmlHttpRequestを使用できるように、ASP.NET WebAPIでCORS(クロスオリジンリソースシェアリング)を処理するための最も洗練された方法(現在利用可能)を知りたいだけですか?これをすべてのタイプのリクエスト(GEt、POSTなど)のヘッダーにOPTIONSと統合するにはどうすればよいですか?
ありがとう!
Tpeczekは素晴らしい発見をしましたが、私自身の調査を行っている間に、App_Startフォルダーの構成ファイルでCORSを構成できる、似たような非常に洗練されたCORS処理方法を見つけました。そのすべては、Thinkectureと呼ばれるオープンソースライブラリを使用して処理されます。詳細はこちらをご覧ください:
http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/
これには多くの利点があります。オリジン、メソッド(GET、POSTなど)、特定のコントローラーおよびアクションへのアクセスを構成でき、コントローラーを属性からクリーンに保つこともできます。
WebAPI、IIS、およびASP.NETMVCがサポートされています。
以下を web.cofig ファイル (system.webserver 要素内) に追加します。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="accept, maxdataserviceversion, origin, x-requested-with, dataserviceversion" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Max-Age" value="1728000" />
</customHeaders>
</httpProtocol>
global.aspx.cs ファイルに以下のコードを追加します
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.StatusCode = 200;
Response.End();
}
}
Carlos Figueira は、CORS と ASP.NET Web API に関する素晴らしい一連の投稿を行っています。
個人的には、属性を簡単に拡張して許可されたオリジンを制御できるため、 Take 2アプローチの大ファンです。EnableCors
Web API のナイトリーで CORS がサポートされるようになりました
ナゲットを使用して:
次に、web.config でバインディングを修正します 次に、CORS を有効にします
config.EnableCors(new EnableCorsAttribute())
詳細については、この wiki を参照してください https://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API&referringTitle=Specs
編集 19-04-2013 Scott Guthrie がそれについてブログを書いています: http://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based -routing-improvements.aspx
CORS をどの程度細かく制御したいかによって異なります。たとえば、任意のドメインを許可する場合は、IIS で構成することにより、すべての応答に静的 CORS ヘッダーを追加できます。私はこのアプローチを選び、それについてここに書きました。