3

「クロスドメインポスト」としても知られる「別のドメインでの POST リクエスト」の問題に関する「解決策」の多くを読んだことがありますが、それでも彼らが修正したと言っているように機能させることはできません。

この問題に関するこれらの記事をすべて読んだことで、なぜそれが起こっているのかがわかりましたが、ハックムーブなどを使用せずに安全な方法でプロジェクトで動作させる必要があります。誰かがそれを機能させる方法を知っていて、私たちを助けてくれるといいのですが、それは「私たち」を意味します。

私の状況: 私は、ドメイン B (mvc4 webAPI) への ajax ポスト呼び出しを行う、ドメイン A でホストされている webapp を持っています。ajax post 呼び出しは次のようになります。

var profile = { Id:"1234567890", Name:"Name_01"}
$.ajax({
  type: "POST",
  url: 'http://domainB/api/Profile',
  data: JSON.stringify(profile)
});

@domainBカスタム応答ヘッダーを設定するために使用しました:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="X-Requested-With" />
        <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

@domainB webAPIポストメソッド私はこれを持っています:

public void Post(dynamic newProfile)
{
...
}

そのため、アクティブ化/開始された ajax 呼び出しで、webAPI プロジェクトのデバッグ モードで、webAPIOperation could destabilize the runtimeの JsonFX.Serilization.DataWriter で SerializationException を取得し、ブラウザーでエラーとして取得します

XMLHttpRequest cannot load http://domainA/api/Profile. Origin http://domainB is not allowed by Access-Control-Allow-Origin.

Fiddler で要求と応答をキャッチしていますがAccess-Control-Allow、応答側にヘッダーがまったくないことがわかります。

私が使用しているものを書きましたが、これがうまくいかないため、ドメインAからドメインBへのajaxポストコールが機能するようにするために何をすべきか、またはこれに対する実際の解決策は何ですか。

4

2 に答える 2

2

さまざまな利用可能なスクリプト/回避策に依存してクロスドメイン呼び出しを実行しようとするのではなく、独自のドメインで Web メソッドを作成してみませんか。

これを AJAX で呼び出すことができます。

次に、独自の Web メソッドに他のドメインへの呼び出しを実行させます。これは、ブラウザーに呼び出しを実行させるのと同じセキュリティ問題の影響を受けません。

したがって、呼び出しは次のようになります。

ブラウザー AJAX 呼び出し --> 独自の Web メソッド --> 他のドメイン サービスへの呼び出し --> メソッドに結果が返される --> メソッドがブラウザーに返されます。

于 2012-12-20T14:22:47.117 に答える
0

CORSプリフライトリクエストに問題があるようです。これについては、 http://www.html5rocks.com/en/tutorials/cors/、http: //remysharp.com/2011/04/21/getting-cors-working/、およびhttp://wwwでお読みください。.w3.org/TR/cors/

とにかく...単純でないAJAXリクエストの場合、ブラウザは最初にURLにOPTIONSリクエストを作成します。これを処理して、期待される結果を返す必要があります。ブラウザで OPTIONS 応答が OK の場合、ブラウザは、最初に送信したかった実際の POST 要求を送信します。そのため、(サーバー上に) OPTIONS ではなく POST のハンドラーしかない場合、プリフライト リクエスト (OPTIONS) を正しく処理できず、すべてがバラバラになります。

于 2012-12-20T17:47:22.287 に答える