0

[ScriptService] 属性を使用して、ASP.NET Web サービスを実行しています。この記事から読んだことから:

http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx

デフォルトでは、ASP.NET は JSONP リクエストを許可しません (クロスドメイン リクエストを拒否するために DOM に挿入されます)。これは、次の 2 つの方法で行います。

1) POST リクエストのみを受け入れる (常に GET を介したスクリプト インジェクション) 2) "Content-type: application/json" 以外の HTTP ヘッダー Content-type を送信する接続を拒否する (ブラウザは送信しません)。

私はクロスドメインの問題に精通しており、JSONP が何であるかを知っており、ASP.NET がデフォルトでそのように制限されている理由を完全に理解しています。

しかし今、私は自分の Web サービスを公開しており、誰にでも公開する必要があります。そのため、Javascript を介して Web サービスへのクロスドメイン要求を明示的に有効にする必要があります。これにより、外部 Web サイトが jquery などから Web サービスを介してデータを取得できるようになります。

[ScriptMethod(UseHttpGet=true)] のように ScriptMethod 属性を変更して、GET 経由のリクエストを許可する手順 (1) については既に説明しました。jQuery で確認したところ、GET リクエストが機能するようになりました (同じドメインで)。しかし、修正点 (2) にたどり着くにはどうすればよいでしょうか。

一部のブラウザーがサポートする Allow-Origin-* ヘッダーについては知っていますが、まだ標準ではありません。ユーザーや顧客に、Web サービスを使用するために HTTP ヘッダーを変更するよう強制したくありません。

要約すると、JSON を介してパブリック Web サービスの ScriptingService のクロスドメイン リクエストを有効にするための適切な方法が必要です。つまり、Web サービスを公開する方法がなければならないということです。それが、ほとんどの Web サービスの目的です。

4

2 に答える 2

0

jQuery ajax() 関数には「crossDomain」プロパティがあります。

jQuery.ajax()から貼り付け

crossDomain (追加 1.5) デフォルト: 同一ドメイン リクエストの場合は false、クロスドメイン リクエストの場合は true 同じドメインで crossDomain リクエスト (JSONP など) を強制する場合は、crossDomain の値を true に設定します。これにより、たとえば、別のドメインへのサーバー側のリダイレクトが可能になります

于 2011-07-19T16:35:12.730 に答える
0

このような目的で従来の ASMX サービスを使用することは、失われた原因のように思えます。その拡張可能な性質により、非常に簡単にJSONP を有効にできるWCF を試してみてください。したがって、ベスト プラクティスを求める場合、WCF は .NET プラットフォーム上で Web サービスを構築する必要があるテクノロジです。

または、現時点で .NET 3.5 に移行する余裕がない場合は、カスタム http ハンドラ ( .ashx) を作成して移行することもできます。

于 2011-07-19T16:27:33.957 に答える