web-dev-qa-db-ja.com

asp.net Webforms [WebMethod]エンドポイント上のCORSエンドポイント

[WebMethod]注釈付きエンドポイント関数をWebformsスタイルのWebアプリ(.aspxおよび.asmx)に追加しようとしています。

これらのエンドポイントに[EnableCors]で注釈を付け、それによってすべての優れたajax-preflight機能を取得したいと思います。

VS2013は注釈を受け入れますが、それでもエンドポイントはCORSでNiceを再生しません。 (それらは、同じオリジンを使用しても問題なく機能しますが、クロスオリジンでは使用できません)。

ダウンやダーティでクロスオリジンを機能させることもできません

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");

アプローチ-私のブラウザーは応答を拒否し、クロスオリジンの応答ヘッダーは表示されません。

これらの[WebMethod]エンドポイントでCORS機能を取得するにはどうすればよいですか?

14
O. Jones

このページのすべての手順を実行したことを再確認することをお勧めします: ASP.NETのCORS

に加えて:

Response.AppendHeader("Access-Control-Allow-Origin", "*");

また試してください:

Response.AppendHeader("Access-Control-Allow-Methods","*");

ウェブ設定に直接追加してみてください:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" value="*" />
       <add name="Access-Control-Allow-Headers" value="Content-Type" />
     </customHeaders>
   </httpProtocol>
</system.webServer>

それができない場合は、両方のドメインを確実に制御する必要があります。

14
MikeDub

プリフライトリクエストが必要な場合。認証済みのリクエストを送信できるため、_Access-Control-Allow-Origin: *_を設定することはできません。特定のOriginドメインである必要があります。
また、デフォルト以外のものを使用している場合は、_Access-Control-Allow-Methods_および_Access-Control-Allow-Headers_応答ヘッダーを設定する必要があります。
(これらの制約はCORS自体が機能する方法にすぎないことに注意してください。これが定義方法です。)

したがって、_[EnableCors]_属性を単にスローするだけでは不十分であり、パラメータに値を設定する必要があります。

_[EnableCors(origins: "https://www.olliejones.com", headers: "X-Custom-Header", methods: "PUT", SupportsCredentials = true)]
_

または、手動で明示的に実行したい場合:

_HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "https://www.olliejones.com");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", "X-Custom-Header");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "PUT");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
_

最後に、開始時に.EnableCors()を呼び出す必要があります。たとえばMVCまたはWebAPIの場合、設定などを登録するときにHttpConfigurationでこれを呼び出しますが、WebFormsでどのように機能するかわかりません。

2
AviD

AppendHeaderメソッドを使用してキャッシュ固有のヘッダーを送信し、同時にキャッシュオブジェクトモデル(Cache)を使用してキャッシュポリシーを設定した場合、キャッシュオブジェクトモデルを使用すると、キャッシュに関連するHTTP応答ヘッダーが削除されることがあります。この動作により、ASP.NETは最も制限の厳しい設定を維持できます。たとえば、ユーザーコントロールを含むページを考えてみます。これらのコントロールのキャッシュポリシーが競合している場合は、最も制限の厳しいキャッシュポリシーが使用されます。 1つのユーザーコントロールがヘッダー "Cache-Control:Public"を設定し、別のユーザーコントロールがSetCacheabilityの呼び出しを介してより制限的なヘッダー "Cache-Control:Private"を設定した場合、 "Cache-Control:Private"ヘッダーは応答。

CustomHeadersのWeb設定でhttpProtocolを作成できます。

<httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" values="*" />        
     </customHeaders>
   <httpProtocol>
0
Nirav Patel

Webフォームでは、

Response.AddHeader( "Access-Control-Allow-Origin"、 "*");

の代わりに

Response.AppendHeader( "Access-Control-Allow-Origin"、 "*");

最初のものは古いバージョンのASP.Net Webフォームで動作します。

0
Joe Park

あなたはMVCでこれを行うことができます

[EnableCors(origins: "*", headers: "*", methods: "*")]
public ActionResult test()
{
     Response.AppendHeader("Access-Control-Allow-Origin", "*");
     return View();
}
0
Ankur Shah