IE7以降でCORSのソリューションを最初に投稿してから、多くの変更がありました。まず、jQueryプロパティ$ .support.corsはデフォルトでtrueであり、.NET Frameworks 4.0以降では、バージョン3.5.1以前で実装されているCORSはサポートされなくなりました。ASP.NET 4.0でWebサービスを作成するときに、NuGetパッケージとして利用できるThinktecture.IdentityModelをインストールしました。次に、Global.asaxファイルのApplication_Startメソッドに、次を追加します。
void Application_Start(object sender, EventArgs e)
{
Thinktecture.IdentityModel.Http.Cors.IIS.UrlBasedCorsConfiguration.Configuration
.ForResources("*")
.ForOrigins("http://localhost:80, http://mydomain")
.AllowAll()
.AllowMethods("GET", "POST");
}
次に、system.webServer内にhttpProtocol要素を追加します。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With, X-File-Name" />
<add name="Access-Control-Allow-Methods" value="GET, POST" />
</customHeaders>
</httpProtocol>
私の$.ajax呼び出しは次のようになります:
$.ajax({
url: serviceUrl,
data: JSON.stringify(postData),
type: "POST",
cache: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess,
error: onError
});