自从我第一次在 IE7 及更高版本中发布我的 CORS 解决方案以来,发生了很大变化。首先,jQuery 属性 $.support.cors 默认为 true,.NET 框架 4.0 及更高版本不再支持在 3.5.1 及更低版本中实现的 CORS。使用 ASP.NET 4.0 编写 Web 服务时,我安装了 Thinktecture.IdentityModel,它可作为 NuGet 包使用。然后,在 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
});