2016-02-25 21 views
11

[WebMethod]注釈付きエンドポイント機能をWebformsスタイルのWebアプリケーション(.aspxおよび.asmx)に追加しようとしています。asp.net Webforms [WebMethod]エンドポイントのCORSエンドポイント

これらのエンドポイントに[EnableCors]という注釈を付けることで、すべての良いajax-preflight機能を得ることができます。

VS2013はアノテーションを受け入れますが、依然としてエンドポイントはCORSでうまく再生されません。 (同じ原点を使用していても原点を越えていない場合は正常に動作します)。

私も彼らがダウンして汚い

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

アプローチと交差起源を機能させることはできません - 私のブラウザが応答を拒否し、クロスオリジンのレスポンスヘッダは表示されません。

[WebMethod]エンドポイントでCORS機能を使用するにはどうすればよいですか?

+0

WebFormsは積極的にヘッダーを変更することを困難にしました。何かがユーザーに送信されるとすぐに、ヘッダーを変更することはできません。ここで私が前に使用してきたハックがあります:http://stackoverflow.com/questions/4091157/httpmodule-to-add-headers-to-request – MatthewMartin

+0

そしてwebconfigでそれを行う別の方法http://stackoverflow.com/questions/2922178/add-to-add-to-add-response-http-headers-in-web-config – MatthewMartin

+0

さらに、owinミドルウェアを使用してヘッダーを操作する、より現代的な方法:http://www.mikesdotnetting.com/article/269/asp-net-5-middleware-where-has-my-httpmodule-gone – MatthewMartin

答えて

0

あなたのコードはよく見えますが、IISはヘッダーエンティティだけを期待通りに送信しません。 IISが正しく構成されているかどうかを確認してください。 CORSがあなたの特殊性の問題のために動作しない場合IIS7

の設定

  • 設定IIS6
  • は、多分別の可能な方法JSONPです。

+0

おそらくjsonが別の方法かもしれません。どうやって? – Coding4Fun

+1

'JSONP'を' JSON'と間違えて読みました。 JSONPレスポンスは、関数呼び出しでラップされた標準のJSON文字列です。現代のブラウザはすべて、元のドメインポリシーの制限なしにJSONPレスポンスを評価することができます。あなたはこのようなC#のためのいくつかのソリューションを見つけることができますhttp://stackoverflow.com/questions/14221429/how-can-i-produce-jsonp-from-an-asp-net-web-service-for-cross-domain-calls – stanleyxu2005

7

私はダブルチェックあなたはこのページのすべての手順を実行したお勧めします。ほかにCORS on ASP.NET

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

関連検索:

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

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

<httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Methods" values="*" /> 
     <add name="Access-Control-Allow-Headers" values="Content-Type" /> 
    </customHeaders> 
    <httpProtocol> 

これに失敗すると、両方のドメインを確実に制御する必要があります。

3

プリフライトリクエストが必要な場合は、認証された要求を送信できるので、Access-Control-Allow-Origin: *を設定することはできません。特定のOriginドメインである必要があります。
また、デフォルト以外のものを使用している場合は、Access-Control-Allow-MethodsAccess-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を使用する場合は、configなどを登録するときにHttpConfigurationでこれを呼び出すことになりますが、WebFormsとの関係はわかりません。

0

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

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

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

あなたはWebフォームのためにMVC

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

で、このように行うことができます、あなたは "*"、

Response.AddHeader( "アクセス制御 - 許可 - 起源" を使用することができます);代わりに

Response.AppendHeader( "アクセス制御 - 許可 - 起源"、 "*")の

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

関連する問題