Многое изменилось с тех пор, как я впервые опубликовал свое решение для CORS в IE7 и выше. Прежде всего, свойство jQuery $ .support.cors по умолчанию имеет значение true. Платформы .NET 4.0 и выше больше не поддерживают CORS, как реализовано в версиях 3.5.1 и ниже. При написании веб-службы с ASP.NET 4.0 я установил модель Thinktecture.IdentityModel, которая доступна в виде пакета NuGet. Затем в методе Application_Start файла Global.asax добавьте:
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");
}
Теперь добавьте элемент httpProtocol в system.webServer:
<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
});