特定のドメインに対してクロスドメインAJAXリクエストを有効にするために、global.asax.csに次のコードがあります。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string whiteList =
System.Configuration.ConfigurationManager.AppSettings["AjaxCrossDomainWhitelist"];
if (!string.IsNullOrWhiteSpace(whiteList))
{
string[] whiteListDomains = whiteList.Split(';');
string origin = Request.Headers["origin"];
if (!string.IsNullOrEmpty(origin))
{
origin = origin.ToLower();
foreach (string domain in whiteListDomains)
{
if (domain.ToLower() == origin)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", domain);
break;
}
}
}
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
//Access Control policy has a lifetime of one hour
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "3600");
HttpContext.Current.Response.End();
}
}
}
Webサイトで呼び出されたWebサービスの1つが正常に戻ると、「Access-Control-Allow-Origin」ヘッダーが正常に送信され、すべてが正常に機能します。ただし、サービス呼び出しによって例外が発生した場合。「Access-Control-Allow-Origin」ヘッダーは引き続きHttpContext.Responseに追加されます。Application_EndRequestをトラップし、Response.Headersコレクションをチェックすることで同じことを確認しました。ただし、Firebug、Chrome Dev Tools、またはCharlesで送信された応答を確認すると、「Access-Control-Allow-Origin」ヘッダーが送信されなかったため、理由がわかりません。
ポインタはありますか?