1

以前にも同様の質問をしたことがありますが、ようやく問題の根本にたどり着きました。VS 2010 には 2 つのプロジェクトがあるソリューションがあります。1 つのプロジェクトは、2 番目の WebAPI プロジェクトへの残りの呼び出しを行う mvc 4 アプリケーションです。これらのプロジェクトは同じソリューションにありますが、IE 以外のものを使用すると、同じオリジン ポリシー エラーが発生します。各プロジェクトが個別の開発サーバー インスタンスで起動されるという事実ですが、よくわかりません。

同じオリジンエラーに遭遇することなく、これらのプロジェクトの両方を実行できる解決策を誰かが説明してもらえますか? (関連する副次的な質問です。自分の API を一般に公開したい場合、同じエラーが発生しないようにするにはどうすればよいでしょうか?)

4

2 に答える 2

3

WebAPI プロジェクトを 作成HttpRequestまたは呼び出すメイン MVC4 アプリケーション内にシン プロキシ レイヤーを作成する必要があります。WebClient

したがって、あなたのJavascriptは次のようなものを呼び出します

http://samedomain/proxy/getproduct/29

ProxyController の GetProduct アクションは、実際の WebAPI URL に対して HttpRequest 呼び出しを行う必要があります。

http://otherdomain/api/Product/29

そしてJsonResult、それを呼び出し元の Javascript に戻し、そこで作業することができます。JavaScript とプロキシ レイヤーが同じドメインにあるため、オリジン アクセス ポリシーの問題に直面することはありません。

編集: 両方とも localhost にあるがポートが異なる場合でも、ブラウザーに関する限り、それは別のドメインとしてカウントされます。localhost:41928 から localhost:58128 への呼び出しには、このセキュリティ ポリシーが適用されます。これを回避しようとしている場合は、MVC WebAPI をメイン プロジェクトに配置する必要があります。2 つのプロジェクトを結合するには、新しい MVC WebAPI プロジェクトを作成します。これには、サービス ルートと通常の MVC ルートが付属しています。


本当に「オープン」な WebAPI サービスが必要な場合は、このガイドに従って CORS を有効にすることができます。IIS7 では、これを web.config ファイルに追加します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>
于 2012-11-29T19:54:03.420 に答える
1

私がやったことと私にとってうまくいったことは、今のところIIS Expressを使用し、プロジェクトを同じ仮想ディレクトリに向けることです

于 2012-12-07T14:42:03.423 に答える